访问Django表单字段的子集

时间:2018-10-04 18:17:00

标签: django django-forms django-views

在保持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或直接在模板中)。

1 个答案:

答案 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 answerdjango-form-utils,这是我的回答得到更好记录的版本。但是,后者似乎今天并没有得到维护,但可以根据您的Django版本而工作。