from django import forms from django.forms.forms import BoundField class StructuredForm: group_struct = [] def groups(self): group_list = [] for name, fields in self.group_struct: group_list.append((name, [BoundField(self, self.fields[fname], fname) for fname in fields])) return group_list ################# # # example form # class MyForm(forms.ModelForm, StructuredForm): group_struct = ((None, ["fieldname1"]), ("sectionname1", ["fieldname2", "fieldname3", "fieldname4"]), ("sectionname2", ["fieldname5", # ... ]), # ... ) class Meta: model = MyModel # exclude = ... # ... ##################### # # example template # """ <form action="#" method="post"> {% for name, fields in form.groups %} {% if name %} <fieldset> <legend>{{name}}</legend> {% endif %} <table> {% for field in fields %} <tr><th>{{field.label}}</th><td>{{field.errors}}{{field}}{% if field.help_text %}<br/>{{field.help_text}}{% endif %}</td></tr> {% endfor %} </table> {% if name %} </fieldset> {% endif %} {% endfor %} <p> <input type="submit" name="submit" value="Send" /> </p> </form> """