2014-09-26 63 views
1

我想显示2组字段。该组是根据字段的种类定义的。Django字段显示模板按组

我添加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 %} 

这是工作部分。我有良好的字段标签,但我没有显示文本输入。

如何获得良好的野外物体?

回答

1

不要通过您get_group方法self.fields重复,而是通过直接selfself.fields包含原始字段实例:为了显示,Django创建包装这些字段的BoundField实例,以及通过self['fieldname']直接访问的实例。

1

为了表示模板中的表单字段Django使用了BoundField。 BoundField用于显示HTML或访问Form实例的单个字段的属性。所以你的情况,你应该穿得分组与绑定列字段,如:

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)]