我想显示2组字段。该组是根据字段的类型定义的。
我在表单中添加了两个方法:
def get_group_a(self):
return [obj for obj in self.fields.values() if isinstance(obj, GroupAField)]
def get_group_b(self):
return [obj for obj in self.fields.values() if isinstance(obj, GroupBField)]
然后在模板中我试图显示表单:
<h1>Group A:</h1>
{% for f in form.get_group_a %}
<div class="fieldWrapper">
{{ f.errors }}
<label> {{ f.label }}:</label>
{{ f }}
</div>
{% endfor %}
<h1>Group B:</h1>
{% for f in form.get_group_b %}
<div class="fieldWrapper">
{{ f.error }}
<label> {{ f.label }}:</label>
{{ f }}
</div>
{% endfor %}
这部分有效。我有很好的标签,但我没有显示文字输入。
如何获得好的野外对象?
答案 0 :(得分:1)
为了在模板中表示表单字段,Django使用BoundField。 BoundField用于显示Form实例的单个字段的HTML或访问属性。因此,在您的情况下,您应该使用BoundField包装分组字段,如下所示:
def get_group_a(self):
return [BoundField(self, field, name) for name, field in self.fields.items() if isinstance(field, GroupAField)]
def get_group_b(self):
return [BoundField(self, field, name) for name, field in self.fields.items() if isinstance(field, GroupbField)]
答案 1 :(得分:1)
不要在get_group方法中迭代self.fields
,而是直接通过self
。 self.fields
包含原始字段实例:为了显示,Django创建了包装这些字段的BoundField实例,以及您通过self['fieldname']
直接访问的实例。