Django 表单字段分组

标签 django django-forms django-templates

假设我有一个包含 20 个字段的表单,我想将其中 10 个字段 (group1) 放入特定的 div 环境中,将其他 10 个字段 (group2) 放入不同的 div 环境中。像这样的东西:

<div class="class1">
{% for field in form.group1 %}
            {{ field.label}}: {{ field }}
{% endfor %}
</div>

<div class="class2">
{% for field in form.group2 %}
            {{ field.label}}: {{ field }}
{% endfor %}
</div>

有什么想法可以通过迭代字段来实现这一点吗?更一般地说,我希望能够使用许多不同的 div 环境和表单字段集来做到这一点。

最佳答案

任何对字段进行分组的逻辑方法都可以...假设您的表单上有一个方法可以返回您显式分组的表单字段?

为了节省打字,也许可以使用某个字段前缀命名方案?

class MyForm(forms.Form):
    group1_field = forms.CharField()
    group1_field = forms.CharField()
    group2_field = forms.CharField()
    group2_field = forms.CharField()

   def group1(self):
        return [self[name] for name in filter(lambda x: x.startswith('group1_'), self.fields.values()]

也许可以在可以过滤的字段上设置一个属性?

class MyForm(forms.Form):
    field = forms.CharField()
    field.group = 1

    field2 = forms.CharField()
    field2.group = 2

    def group1(self):
        return filter(lambda x: x.group == 1, self.fields.values())

    def group2(self):
        return filter(lambda x: x.group == 2, self.fields.values())

如果设置这些属性,您还可以使用重新分组标签。

{% regroup form.fields by group as field_group %}
{% for group in field_group %}
<div class="group_{{ group.grouper }}">
  {% for field in group.list %}
    {{ field }}
  {% endfor %}
</div>
{% endfor %}

关于Django 表单字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366745/

相关文章:

django - 如何防止 Django 管理员用户更改其他管理员用户的个人资料数据?

django - 对于大量选择,ModelChoiceField有哪些替代方案?

Django 动态表单,带有 HTML 数组的表单集

Django-grappelli 管理员 : No reverse match error

django - 提高forms.ValidationError不能在自定义模板形式下工作

python - Django 从apache 获取环境变量

django - 在 Django 中测试页面内容中的链接

javascript - Morris.js 使用 Django 模板数组显示不正确的折线图

python - django admin - 选择反向外键关系(不是创建,我想添加可用)

python - Google Translation API id 因请求过多而阻止 IP 地址