如何在ModelChoiceField中使用多个查询集?

时间:2009-11-18 16:11:52

标签: django django-forms django-queryset

我刚开始学习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在我的类别字段中填入所有PoliticEconomic值的列表。
但是,如果我选择"Politic",我的表单验证会出现问题,因为我的类别字段的查询集是Economic.objects.all(),而不是Politic.objects.all()。 如何更改动态查询集?有什么想法吗?

3 个答案:

答案 0 :(得分:2)

你可以有2个不同的选择一个用于政治,一个用于经济,并根据选择字段显示/隐藏它们。

或者Abstract Model Inheritance可能会解决您的问题

答案 1 :(得分:0)

一种可能性是在Catagory模型中使用Generic Relation

答案 2 :(得分:0)

感谢您的回答,我尝试使用您的两个解决方案(抽象模型和通用关系),但它无法解决我的问题。
所以我创建了两个不同的ModelChoiceField(一个用于Politic,一个用于经济),我在模板中使用Jquery的隐藏/显示效果(就像你说的Kugel)。
但是,如果你对我的问题有任何其他想法,我很擅长。