2012-05-31 18 views
6

Ho fatto alcuni moduli personalizzati con django ma non capisco come accedere agli attributi che un campo modulo specifico ha allegato tramite forms.py.Attributi del campo modulo di accesso in template 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 

Ecco come ho attaccato gli atti 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> 

Ho cercato di accedere ai suoi attributi:

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

E non sembrano trovare una documentazione chiara su ciò che è accessibile e cosa non lo è. In realtà preferirei avere una documentazione di vecchia moda piuttosto che uno "amichevole" di django

risposta

9

Sembra che tu voglia solo visualizzare errori di forma per ogni campo. Dopo che il modulo è stato pulito o convalidato nella vista, i campi devono contenere i messaggi di errore. Quindi, che potete visualizzare nel modello in questo modo:

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

Tuttavia, se davvero si vuole visualizzare gli attributi del campo di modulo allora si potete provare qualcosa di simile:

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

Grazie per aver suggerito che andare via .errors ma ancora rispondere alla domanda. –

6

Negli altri casi può può essere utile per impostare e ottenere gli attributi del campo.

Impostazione in funzione init di forma:

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

... e accedervi in ​​un modello:

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

Molto utile !!! –

Problemi correlati