Django字段显示模板组

时间:2014-09-26 10:38:56

标签: django django-templates django-models

我想显示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 %}

这部分有效。我有很好的标签,但我没有显示文字输入。

如何获得好的野外对象?

2 个答案:

答案 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,而是直接通过selfself.fields包含原始字段实例:为了显示,Django创建了包装这些字段的BoundField实例,以及您通过self['fieldname']直接访问的实例。