2014-09-26 98 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)]