在Django中动态创建多个对象的选择表单的最佳方法是什么

时间:2013-09-23 05:12:14

标签: django django-forms

我有一些对象可以说foo1,foo2,foo3,foo4 ..等等。

我想创建一个表单,我可以在其中选择这些foo对象中的任何一个。我可以通过几种方式做到这一点。

1)

 class FooReportForm(forms.Form):
    foo = forms.CheckboxInput()
    def __init__(self,*args,**kwargs):
        foos= kwargs.get('foos')
        foo_choice = []
        for foo in foos:
            index = (foo.id,foo.name +" Area"+foo.area+" Region"+foo.region )
            foo_choice.append(index)

        super( PropertyReportForm, self).__init__(*args, **kwargs)
        self.fields['foo'].choices = foo_choice`

2)`

class FooForm(forms.Form):
    def __init__(self, *args, **kwargs):
        foos= kwargs.pop('foos')
        super(FooForm, self).__init__(*args, **kwargs)
        choices = []
        if foos:
            pass
        else:
            foos = []
        for i,fooin enumerate(foos):
            index = [(foo.id , foo)]
            choices = index
            self.fields['foo_%s'% i] = forms.MultipleChoiceField(choices=choices,widget =forms.CheckboxSelectMultiple,required = False)

第一种方法不允许我先检查或取消选中某些选项。我怎么能用这种方法做到这一点? 第二个是错误的,因为它为每个选择创建了一个新字段。 这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

您可以将模型多项选择字段与Checkbox Select Multiple Widget一起使用。

foos = forms.ModelMultipleChoiceField(queryset=Foo.objects, widget=forms.CheckboxSelectMultiple())