2009-07-15 15 views

risposta

21
<form> 
    {% for field in form %} 
      {{ field.label }}: {{ field.value }} 
    {% endfor %} 
</form> 

Date un'occhiata qui Form fields e Working with forms

+0

Grazie - avevo visto .label ma non .initial. Curiosamente, l'iniziale non è nemmeno menzionata nel documento "Working with forms". – ine

+0

. Initial funziona solo la prima volta che viene presentato il modulo, giusto? Ad esempio, se ci sono errori e si ripresenta il modulo, non ci saranno iniziali nella mia esperienza. – dfrankow

+0

Nella terminologia di Django, questo funziona solo con moduli non associati. Cosa succede se si desidera che funzioni con entrambi i moduli non vincolati e rilegati? – dfrankow

3

È inoltre possibile utilizzare un nuovo widget: ho fatto questo in modo che io possa avere un widget che ha creato una visualizzazione del testo di una data, e un modulo nascosto con la stessa data in esso, quindi potrebbe essere visibile all'utente, ma non può cambiarlo.

Ecco un iniziale (ancora testando/di essere ripulito) Versione:

class DayLabelWidget(forms.Widget): 
    def render(self, name, value, attrs): 
     final_attrs = self.build_attrs(attrs, name=name) 
     if hasattr(self, 'initial'): 
      value = self.initial 
     if type(value) == type(u''): 
      value = datetime.date(*map(int, value.split('-'))) 
     return mark_safe(
      "%s" % value.strftime("%A (%d %b %Y)") 
     ) + mark_safe(
      "<input type='hidden' name='%s' value='%s' />" % (
       name, value 
      ) 
     ) 

    def _has_changed(self, initial, data): 
     return False 

È quindi possibile utilizzare questo campo come (widget=DayLabelWidget,).

5

Inoltre, non dimenticate che potete anche fare {{myform.instance.name}}

+0

cos'è questo? dove è documentato? – dfrankow

+0

form.instance restituisce l'oggetto rappresentato dalla forma associata. È nei documenti qui: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method Vorrei anche menzionare che questo funziona solo con modelforms – priestc

+0

ah, motore di app di google non supporta ModelForm, quindi stiamo usando Form. – dfrankow

2

Perché non utilizzare {{}} field.data?

+0

Perché dovrebbe essere fatto nelle viste non nel modello (nel modello è loop) –

11

argomento vecchio, ma penso che alcune persone viene ancora qui.

si può fare qualcosa di simile anche:

from django.utils.safestring import mark_safe 

class PlainTextWidget(forms.Widget): 
    def render(self, _name, value, _attrs): 
     return mark_safe(value) if value is not None else '-' 

E nel modulo

class SomeForm(Form): 
    somename = forms.CharField(widget=PlainTextWidget) 
Problemi correlati