我使用django_过滤器进行高级搜索,并选择2widget显示外键字段的选项。
加载正确的值,但每当我提交表单时,就会收到一条错误消息:选择一个有效的选项。这个选择不是一个可行的选择。
这个错误看起来很明显,但我找不到解决方法。有什么建议吗?
滤过器

class MyFilter(django_filters.FilterSet):
    b = django_filters.ModelChoiceFilter(
        queryset=ModelA.objects.values_list('b__name', flat=True)
        widget=Select2Widget()
    )

class Meta:
    model = ModelA
    fields = ('b',)

模型.py
class ModelA(models.Model):
    b = models.ForeignKey('ModelB', on_delete=models.CASCADE)

class ModelB(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

最佳答案

正如用户@dirkgroten在对这个问题的评论中指出的,下面这一行看起来很奇怪:

queryset=ModelA.objects.values_list('b__name', flat=True)

这样小部件就无法知道列表中每个元素的pk(因为它只返回名称)这可能导致视图无法保存选定的ModelB实例,因为它不知道选定的pk
啊,您可能还想使用ModelB而不是ModelA
试着把它改成这样
queryset=ModelB.objects.values('pk', 'b__name')

甚至这个
queryset=ModelB.objects.all()

如果可以的话告诉我们。

09-28 03:13