Select2和django_filters不查询外键

时间:2018-09-14 14:14:48

标签: python django jquery-select2 django-filters

我正在使用django_filters进行高级搜索,并使用select2Widget显示外键字段的选项。

加载正确的值,但是每当我提交表单时,都会出现错误消息:选择一个有效的选择。该选择不是可用的选择之一。

该错误似乎非常明显,但我找不到解决方法。有什么建议么?

filters.py

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',)

models.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

1 个答案:

答案 0 :(得分:2)

AS用户@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()

,让我们知道是否可行。