Python 选择2和django_过滤器不查询外键
我正在使用django_过滤器进行高级搜索,并使用select2Widget显示外键字段的选项 加载正确的值,但每当我提交表单时,都会收到一条错误消息:选择一个有效的选项。该选择不是可用的选择之一 这个错误看起来很明显,但我找不到解决方法。有什么建议吗 过滤器.pyPython 选择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.
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解决了它。谢谢你,你太棒了!