在保持DRY的状态下,如何在Django的表单字段子集之间插入标记?
给出:
class CompensationUpdate(UpdateView):
model = Compensation
fields = [
'salary1',
'salary2',
'incentive1',
'incentive2', ]
我希望能够在视图中访问它们,以便可以将它们的组包装在标记中。例如:
<div class="ibox-content">
{% for field in form.salary_fields %}
...
{% endfor %}
</div>
<div class="ibox-content">
{% for field in form.incentive_fields %}
...
{% endfor %}
</div>
我在大约10个组中的表单上有50多个字段,因此我需要以DRY方式进行。虽然我可以分别访问每个字段,但我不知道如何定义子集(在UpdateView或直接在模板中)。
答案 0 :(得分:1)
您可以使用django-betterforms
,它具有FieldSets,您可以在其中分组字段。
在表单的Meta类中,指定分组字段的FieldSet:
class Meta:
fieldsets = (
('info', {'fields': ('username', 'email')}),
('location', {'fields': ('address', ('city', 'state', 'zip'))}),
('password', {'password1', 'password2'}),
)
在模板中,您可以遍历FieldSets
{% for fieldset in form %}
<div class="ibox-content">
{% for field in fieldset %}
...
{% endfor %}
</div>
{% endfor %}
您可以看到更多的proposed template implementation here。
其他解决方案是this answer或django-form-utils,这是我的回答得到更好记录的版本。但是,后者似乎今天并没有得到维护,但可以根据您的Django版本而工作。