我有一些对象可以说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)
第一种方法不允许我先检查或取消选中某些选项。我怎么能用这种方法做到这一点? 第二个是错误的,因为它为每个选择创建了一个新字段。 这样做的最佳方式是什么?
答案 0 :(得分:2)
您可以将模型多项选择字段与Checkbox Select Multiple Widget一起使用。
foos = forms.ModelMultipleChoiceField(queryset=Foo.objects, widget=forms.CheckboxSelectMultiple())