如何在 ModelChoiceField 中使用多个查询集?
Posted
技术标签:
【中文标题】如何在 ModelChoiceField 中使用多个查询集?【英文标题】:How can I use multiple queryset in a ModelChoiceField? 【发布时间】:2010-12-17 22:42:30 【问题描述】:我刚开始学习 Django,我想在 ModelChoiceField 中使用不同的查询集。
我有 3 个这样的模型:
class Politic(models.Model):
name = models.CharField(max_length=100)
class Economic(models.Model):
name = models.CharField(max_length=100)
class Category(models.Model):
politic = models.ForeignKey(Politic, blank = True, null = True)
economic = models.ForeignKey(Economic, blank = True, null = True)
还有这样的表格:
class MyForm(forms.Form):
choice = forms.ChoiceField(choices = (("0", u"---------"), ("1", u"Politic"),
("2", u"Economic")),
required=False)
category = forms.ModelChoiceField(queryset=Economic.objects.all(),
required=False)
在我的模板中,根据我的选择字段,我使用 Ajax 使用包含所有 Politic
或 Economic
值的列表填充我的类别字段。
但是如果我选择"Politic"
,我的表单验证会出现问题,因为我的类别字段的查询集是Economic.objects.all()
,而不是Politic.objects.all()
。
如何更改我的动态查询集?有什么想法吗?
【问题讨论】:
【参考方案1】:您可以有 2 种不同的选择,一种用于政治,一种用于经济,并根据选择字段显示/隐藏它们。
或者Abstract Model Inheritance 可能会解决您的问题
【讨论】:
【参考方案2】:一种可能性是在您的Catagory
模型中使用Generic Relation。
【讨论】:
【参考方案3】:感谢您的回答,我尝试使用您的两种解决方案(抽象模型和通用关系),但它不能解决我的问题。 所以我创建了两个不同的 ModelChoiceField(一个用于政治,一个用于经济),并在我的模板中使用 Jquery 的隐藏/显示效果(就像你说的 Kugel)。 但是,如果您对我的问题有任何其他想法,我很感兴趣。
【讨论】:
以上是关于如何在 ModelChoiceField 中使用多个查询集?的主要内容,如果未能解决你的问题,请参考以下文章
Django - ModelChoiceField 查询集如何工作?
django ModelChoiceField:如何遍历模板中的实例?
App 适用于 ModelChoiceField 但不适用于 ModelMultipleChoiceField