我想呈现表单分组字段。表单实际上是根据传入的字典动态创建的
for f in settings.FORM_BIG_FIELDS:
self.fields[f['id']] = eval(f['type'])(label=f['label'], required=f.get('required', True))
self.fields[f['id']].groupp = f.get('group', 1)
groupp属性表示适当的组,然后我尝试将其呈现为
{% regroup form.fields.values by groupp as field_group %}
{% for group in field_group %}
<div class="group_{{ group.grouper }}">
{% for field in group.list %}
<p>
{{ field.all }}
{{ field }}
</p>
{% endfor %}
</div>
{% endfor %}
但作为输出,我得到以下内容
<django.forms.fields.CharField object at 0xb527388c>
<django.forms.fields.IntegerField object at 0xb52738ec>
<django.forms.fields.ChoiceField object at 0xb527394c>
我读到这些与BoundField对象不一样。如何呈现字段,或者是否有其他更好的方法来分组字段?
3条答案
按热度按时间ymzxtsji1#
如果你不想使用任何额外的库,那么最简单的解决方案是手动渲染它们,我会说。否则你只会花很多时间重复我复制的库的功能作为评论到你的帖子。
总是有这样的情况下,事情应该是干燥的。但是我们为用户建立网站,用户很少关心模板中的表单渲染是如何完成的。出于这个原因,我们经常像这样手动创建表单模板:
最简单的方式来组织它节省你一些时间。在我看来,这也不是那么糟糕,因为当你需要按字段集组织字段时,这并不常见。
cfh9epnr2#
我知道这个问题相当古老,但我相信仍然有人可以从一个简单的解决方案中受益:
假设您有一个组名称和成员列表。您可以在表单的init中定义一个self.fieldset作为“group_1”的字典:登录'member_1','member_2',.],...}。一旦你把它附加到表单上,你就可以把它传递给视图,然后从视图传递给模板:
在forms.py:
在views.py:
在您的模板中:
v1l68za43#
秘诀就是用途:
在form object中。所以你可以在任何字典中使用它,比如:
现在它将在模板中正确渲染。但是在上面的代码中,你还必须处理字段的初始值和数据值。但这是另一个问题。