Select2 和 django_filters 不查询外键
Select2 and django_filters not querying foreign keys
我正在使用 django_filters 进行高级搜索,并使用 select2Widget 显示外键字段的选项。
加载了正确的值,但每当我提交表单时,我都会收到一条错误消息:Select 一个有效的选择。该选项不是可用的选项之一。
这个错误看起来很明显,但我不知道如何解决它。有什么建议么?
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
AS 用户@dirkgroten 在对该问题的评论中指出,以下行看起来很奇怪:
queryset=ModelA.objects.values_list('b__name', flat=True)
这样小部件就无法知道列表中每个元素的 pk
(因为它只有 return 名称)。这可能导致视图无法保存选定的 ModelB
实例,因为它不知道选定的 pk
.
啊,您可能还想使用 ModelB
而不是 ModelA
试着把它改成这样
queryset=ModelB.objects.values('pk', 'b__name')
甚至这个
queryset=ModelB.objects.all()
让我们知道是否有效。
我正在使用 django_filters 进行高级搜索,并使用 select2Widget 显示外键字段的选项。
加载了正确的值,但每当我提交表单时,我都会收到一条错误消息:Select 一个有效的选择。该选项不是可用的选项之一。
这个错误看起来很明显,但我不知道如何解决它。有什么建议么?
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
AS 用户@dirkgroten 在对该问题的评论中指出,以下行看起来很奇怪:
queryset=ModelA.objects.values_list('b__name', flat=True)
这样小部件就无法知道列表中每个元素的 pk
(因为它只有 return 名称)。这可能导致视图无法保存选定的 ModelB
实例,因为它不知道选定的 pk
.
啊,您可能还想使用 ModelB
而不是 ModelA
试着把它改成这样
queryset=ModelB.objects.values('pk', 'b__name')
甚至这个
queryset=ModelB.objects.all()
让我们知道是否有效。