Ecco una domanda SO pertinente: Django and Fieldsets on Modelform, anche se questo sembra un po 'eccessivo per quello che sto cercando di realizzare. Inoltre, ecco un possibile trucco, anche se sono curioso di sapere come gli esperti di Django risolvono questo problema.
(0) Definire un oggetto pitone fieldset che è iterabile in modo da poter scorrere su di esso in un modello django:
from django.forms.forms import BoundField
class FieldSet(object):
def __init__(self,form,fields,legend='',cls=None):
self.form = form
self.legend = legend
self.fields = fields
self.cls = cls
def __iter__(self):
for name in self.fields:
field = self.form.fields[name]
yield BoundField(self.form, field, name)
(1) Nell'uso visualizzazione:
fieldsets = (FieldSet(form_object, ('field_name1','field_name2'),
legend='Div env 1',
cls="class1"),
FieldSet(form_object, ('field_name3','field_name4'),
legend="Div env 2",
cls="class2"))
return render_to_response('my_form.html',
{'form': form_object,'fieldsets':fieldsets},
context_instance=RequestContext(request))
(2) Ora, nel modello fare:
{% for set in fieldsets %}
<fieldset{% if set.cls %} class="{{ set.cls }}"{% endif %}>
<legend>{{ set.legend }}</legend>
{% for field in set %}
{{ field.label}} : {{ field }}
{% endfor %}
</fieldset>
{% endfor %}
si noti che è possibile sostituire il fieldset
tag wi un tag div
per rispondere alla mia domanda specifica.
+++ Gran parte di questa risposta è stata estratta da this blog post by Michael Kowalchik. +++
Mi piace l'utilizzo del tag di registro --- Non sapevo che esistesse. Grazie! –
Nota: la prima soluzione non funziona per eseguire il loop sui campi del modello --- utilizzare la parola chiave 'yield' per creare un generatore per ottenere i campi previsti (vedere il post seguente) ed emulare l'iterazione di campo tipica di django –
@ C.Reed, hai ragione, ho dimenticato di restituire BoundFields. Aggiornato. Grazie per aver notato! –