2012-05-31 22 views
6

He estado haciendo algunos formularios personalizados con django pero no entiendo cómo acceder a los atributos que un campo de formulario específico ha adjuntado mediante forms.py.Acceda a los atributos del campo del formulario en la plantilla 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 

Así es como adjunté los atributos al campo.

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

He estado tratando de acceder a sus atributos:

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

y no parecen encontrar una documentación clara sobre lo que es accesible y lo que no. Realmente preferiría tener documentación antigua que django "amigable"

Respuesta

9

Parece que solo quiere mostrar errores de formulario para cada campo. Después de limpiar o validar el formulario en la vista, los campos deben contener los mensajes de error. De modo que pueda verlas en la plantilla de este modo:

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

Sin embargo, si usted realmente desea mostrar los atributos de campo de formulario, entonces puede intentar algo como:

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

Gracias por sugerir que ir a la ruta .errors pero aún responder a la pregunta. –

6

En otros casos puede puede ser útil para establecer y obtener atributos de campo.

Configuración de la función init del formulario:

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

... y acceder a él en una plantilla:

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

¡Muy útil! –

Cuestiones relacionadas