python - Select2 and django_filters not querying foreign keys
问题描述
I'm using django_filters for an advanced search and select2Widget to display the options of a foreign key field.
The proper values load but whenever I submit the form I get an error message: Select a valid choice. That choice is not one of the available choices.
The error might seem pretty obvious but I can't find out how to solve it. Any suggestions?
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
解决方案
作为用户@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()
让我们知道这是否有效。
推荐阅读
- javascript - Javascript 转换实现,如 css
- flutter - 在颤动中左右移动对象
- javascript - 选择检查主体时如何更新 MongoDB 中的数据
- rest - 一般来说,为用户设置两条 GET 路由(一条用于 ID,一条用于用户名)是否是多余的?
- c# - 在随机行和列中排列对象
- python - 从运行 python 脚本导入变量
- reactjs - 打字稿中的调度类型
- azure-devops - 我有 yaml 管道,它将在 4 个区域中使用 tf 创建我的 az 资源(rg、vnet、aks ..)。使用相同的 piplin 我想在 2 个区域中创建 acr?
- css - 我有一个 CSS,我希望它内联对齐
- node.js - 无法在 nodejs 应用程序中设置 addFollower 方法的 null 属性 -hashed_password