从queryset构造表单

时间:2014-02-07 11:22:43

标签: python django django-forms

我在特定视图中有queryset

class SomeView(View)
    def get(self, request, *args, **kwargs):
        objs = SomeModel.objects.all()

现在我想以某种方式显示objs形式的复选框。

此外,queryset可能始终不是SomeModel.objects.all()。它可能会在视图中发生变化,具体取决于请求。

实现这一目标的最佳途径是什么?

1 个答案:

答案 0 :(得分:1)

这就是ModelMultipleChoiceField的功能。您可以将它与CheckboxSelectMultiple小部件结合使用,以获得您想要的结果。

class MyForm(forms.Form):
    my_choices = forms.ModelMultipleChoiceField(
                      queryset=SomeModel.objects.all(),
                      widget=forms.CheckboxSelectMultiple)

修改

要根据值更改查询集,您需要覆盖__init__

def __init__(self, *args, **kwargs):
    model_value = kwargs.pop('my_value', None)
    super(MyForm, self).__init__(*args, **kwargs)
    if model_value is not None:
        self.fields['my_choices'].queryset = SomeModel.objects.filter(my_field=my_value)