Aquí hay una pregunta de SO: Django and Fieldsets on Modelform, aunque esto parece un poco exagerado para lo que estoy buscando lograr. Además, he aquí un posible truco, aunque tengo curiosidad por saber cómo los expertos de Django resuelven este problema.
(0) definir un objeto pitón fieldset que es iterable por lo que podemos iterar sobre ella en una plantilla 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) En la vista de uso:
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) Ahora bien, en la plantilla de hacer:
{% 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 %}
en cuenta que es posible sustituir el wi fieldset
etiqueta la etiqueta div
para abordar mi pregunta específica.
+++ Gran parte de esta respuesta se extrae de this blog post by Michael Kowalchik. +++
Me gusta el uso de la etiqueta reagrupar --- No sabía que esto existiera. ¡Gracias! –
Nota: su primera solución no funciona para recorrer los campos de la plantilla --- use la palabra clave 'yield' para crear un generador para obtener los campos esperados (vea mi publicación a continuación) y emule la iteración de campo típica de django –
@ C.Reed, tienes razón, me olvidé de devolver BoundFields. Actualizado. ¡Gracias por notarlo! –