1

我有一些对象可以说 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)

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

4

1 回答 1

2

您可以将 Model Multiple Choice Field 与Checkbox Select Multiple Widget一起使用。

foos = forms.ModelMultipleChoiceField(queryset=Foo.objects, widget=forms.CheckboxSelectMultiple())
于 2013-09-23T05:20:28.077 回答