我正在尝试显示带有一堆字段的表单。我正在尝试将字段组合在一起,因此有一个父字段,然后是父字段下面的一些子字段。
所以我所做的就是在我的表单中创建了一个字典,其中父字段作为访问子字段列表的键。
这是我的表格:
class DetailForm(Form):
a = BooleanField(label='a')
a1 = BooleanField(label='a1')
b = BooleanField(label='b')
b1 = BooleanField(label='b1')
b2 = BooleanField(label='b2')
c = BooleanField(label='c')
c1 = BooleanField(label='c1')
c2 = BooleanField(label='c2')
c3 = ChoiceField(choices=((1,'Default Text'),(0,'Custom Text'),), widget=RadioSelect, label='c3')
fields_dict = {a: [a1],
b: [b1, b2],
c: [c1, c2, c3]
}
以下是我的观点:
def bfa_report(request, template):
form = DetailForm()
fields_dict = form.fields_dict
return render_to_response(template, {
'form': form,
'fields_dict': fields_dict
}, context_instance=RequestContext(request))
以下是我在模板中所做的事情:
<div data-dojo-type="dijit/form/Form" id="parameters_form" data-dojo-id="parameters_form" encType="multipart/form-data" action="" method="">
{% csrf_token %}
{% for key, value in fields_dict.items %}
<div>{{ key }}</div>
<div>
{% for val in value %}
<div>
{{ val }}
</div>
{% endfor %}
</div>
{% endfor %}
</div>
当我转到页面时,我最终显示在页面上:
a
<django.forms.fields.BooleanField object at 0x7f3aa4444cd0>
b
<django.forms.fields.BooleanField object at 0x7f3aa4442490>
<django.forms.fields.BooleanField object at 0x7f3aa4442d90>
c
<django.forms.fields.BooleanField object at 0x7f3aa4442e10>
<django.forms.fields.BooleanField object at 0x7f3aa4442e90>
<django.forms.fields.ChoiceField object at 0x7f3aa4442f10>
字段未显示。我确信有更好的方法可以做我想做的事情。如何按照我们的方式对字段进行分组?
我正在尝试创建一个通用模板来执行此操作。我有几个需要显示的表单,我不想为每个表单创建一个单独的模板。
答案 0 :(得分:2)
问题是您输出的字段与任何表单都没有关联。
我建议您创建覆盖表单__init__
方法的字典:
def __init__(self, *args, **kwargs):
super(DetailForm, self).__init__(*args, **kwargs)
self.fields_dict = {self['a']: [self['a1']],
self['b']: [self['b1'], self['b2']],
self['c']: [self['c1'], self['c2'], self['c3']]
}
希望这有帮助!