Django表单和查询集

时间:2015-11-30 21:33:55

标签: django django-forms django-views

假设我需要过滤多选框中的可用选项。

在我看来,我有:

class ArticleCheckbox(forms.ModelForm):
    article= forms.ModelMultipleChoiceField(queryset=Article.objects.all(),required=False, widget=forms.CheckboxSelectMultiple)
    class Meta:
        model = Book
        fields = ('m2m_article',)

。 在我看来,我将指定:

articleform = ArticleCheckbox()
articleform.fields["m2m_article"].queryset = Article.objects.filter(category = "Animals")

如何在视图中分配查询集会影响类的查询集(Article.object.all())? 它会覆盖吗?我不这么认为。

我想覆盖查询集。我该怎么办?

2 个答案:

答案 0 :(得分:0)

这有用吗?

article=forms.ModelMultipleChoiceField(queryset=Article.objects.all().filter(category = "Animals"),required=False, widget=forms.CheckboxSelectMultiple)

直接在模型中。或者您是否希望将过滤保留到视图中以执行不同的操作?

答案 1 :(得分:0)

您执行此操作的方式是正确的,除非您分配而不是ArticleCheckBox的实例

articleform = ArticleCheckbox()

当表单初始化时,它被赋予一个默认的查询集并且你要覆盖它,初始的查询集将永远不会查询数据库,因为此时不需要检索任何数据。