Python 选择2和django_过滤器不查询外键

Python 选择2和django_过滤器不查询外键,python,django,jquery-select2,django-filters,Python,Django,Jquery Select2,Django Filters,我正在使用django_过滤器进行高级搜索,并使用select2Widget显示外键字段的选项 加载正确的值,但每当我提交表单时,都会收到一条错误消息:选择一个有效的选项。该选择不是可用的选择之一 这个错误看起来很明显,但我找不到解决方法。有什么建议吗 过滤器.py class MyFilter(django_filters.FilterSet): b = django_filters.ModelChoiceFilter( queryset=ModelA.objects.

我正在使用django_过滤器进行高级搜索,并使用select2Widget显示外键字段的选项

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

这个错误看起来很明显,但我找不到解决方法。有什么建议吗

过滤器.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',)
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
型号.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',)
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

正如user@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()

让我们知道这是否有效。

这只是一个输入错误还是您在
MyFilter.Meta
中有
model=a
?是不是应该是
model=ModelA
?@Ralf这是个打字错误。谢谢对如何解决这个问题有什么建议吗?唯一的调试方法是:1)检查HTML源代码,查看每个选项的值(而不是可见标签)是否正确设置,以及
字段的名称是否正确。2) 设置断点或在视图中打印
请求。发布
数据以检查提交的内容。过滤器中的查询集不应该是
ModelB.objects.all()
?因为你想得到一个选择,B'sChanging它到ModelB而不是ModelA解决了它。谢谢你,你太棒了!