from django.forms.forms import BoundField

class FieldStack(object):
    """ EXAMPLE:

    class MyForm(forms.Form):
        first_name = forms.CharField()
        last_name = forms.CharField()
        website = forms.CharField()
        twitter = forms.CharField()
        facebook = forms.CharField()

        personal_info = FieldStack('first_name', 'last_name')
        contact_info = FieldStack('website', 'twitter', 'facebook')
    
    <ul>{% for field in form.personal_info %}
        <li>{{field.name}}: {{ field }}{{field.errors}}</li>
    {% endfor %}</ul>
    
    <table>{% for field in form.contact_info %}
        <tr><td>{{field.name}}</td><td>{{ field }}</td><td>{{field.errors}}</td></tr>
    {% endfor %}</table>
    """

    def __init__(self, *args):
        self.fields = args
        
    def __get__(self, form, objtype=None):
        for field in self.fields:
            yield BoundField(form, form.fields[field], field)