2012-05-31 66 views
6

我一直在用django做一些自定義表單,但我沒有得到如何訪問特定表單字段通過forms.py附加的屬性。在模板化Django中訪問表單字段屬性

def putErrorInTitle (cls): 
init = cls.__init__ 

def __init__ (self, *args, **kwargs): 
    init(self, *args, **kwargs) 
    if self.errors: 
     for field_error in self.errors: 
      self.fields[field_error].widget.attrs['title'] = self.errors[field_error][0] 
      self.fields[field_error].widget.attrs['class'] = "help_text error_field" 

cls.__init__ = __init__ 
return cls 

這就是我如何將屬性附加到現場。

<dl class="clearfix two"> 
<dd> 
    <label for="id_diagnosis">Diagnostico:</label> 
    <select class="{{form.id_diagnosis.class}}" id="id_equipment_activity-{{ forloop.counter0 }}-id_diagnosis" name="equipment_activity-{{ forloop.counter0 }}-id_diagnosis"> 
    {% for x,y in form.fields.id_diagnosis.choices %} 
    <option value="{{ x }}" {% ifequal form.id_diagnosis.data|floatformat x|floatformat %}selected="selected"{% endifequal %}>{{ y }}</option> 
    {% endfor %} 
    <option value="1000" {% ifequal form.id_diagnosis.data|floatformat '1000'|floatformat %}selected="selected"{% endifequal %}>Otro</option> 
    </select> 
</dd> 
<dd class="vertical_center" id="optional_diagnosis"><label for="optional_diagnosis">Diagnostico opcional:</label>{{ form.optional_diagnosis }}</dd> 
</dl> 

我一直在試圖訪問它的屬性:

class="{{form.id_diagnosis.class}}", class="{{form.id_diagnosis.widget.class}}" 

我似乎還沒有找到關於什麼是可訪問的,什麼是不明確的文件。真的,我寧願有比django「友善」的舊時尚文檔

回答

9

它看起來像你只是想顯示每個領域的表單錯誤。 在視圖中清除或驗證表單後,這些字段應包含 錯誤消息。這樣就可以像這樣在模板中顯示出來:

<form action='.' method='post'> 
    ... 
    <div class='a-field'> 
     {{ form.field_1.errors|join:", " }} 
     {{ form.field_1.label_tag }} 
     {{ form.field_1 }} 
    </div> 
    ... 
</form> 

然而,如果你真的想顯示則表單字段屬性您 可以嘗試類似:

{{ form.field_1.field.widget.attrs.maxlength }} 
+0

感謝暗示他去.errors路線,但還是回答這個問題。 –

6

在其他情況下,它可以可以用來設置和獲取字段屬性。

設置在窗體的初始化函數:

self.fields['some_field'].widget.attrs['readonly'] = True 

...並在模板訪問它:

{{ form.some_field.field.widget.attrs.readonly }} 
+0

非常有幫助! –

相關問題