2012-05-31 4 views
6

Я делаю некоторые пользовательские формы с django, но я не понимаю, как получить доступ к атрибутам, которые в поле формы добавлено через form.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 «friendly»

ответ

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

Очень полезно !!! –

Смежные вопросы