from django import newforms as forms
from django.newforms.forms import BoundField
from django.template import Context, Template

class MedForm(forms.Form):
    """Dynamically assigned/rendered newforms fields using BoundField
    >>> m = MedForm({'med_1':"Lipitor",'dosage_1':"80mg QHS PO", \
                     'med_2':"Lasix",'dosage_2':"40mg QD PO"})
    >>> t = Template('''{% for med in form.med_list %}
    ... {{med.name.label}}: {{ med.name.bf }} {{ med.dosage.bf }}
    ... {% endfor %}''')
    >>> print t.render(Context({'form':m}))
    <BLANKLINE>
    med_1: <input type="text" name="med_1" value="Lipitor" id="id_med_1" /> <input type="text" name="dosage_1" value="80mg QHS PO" id="id_dosage_1" />
    <BLANKLINE>
    med_2: <input type="text" name="med_2" value="Lasix" id="id_med_2" /> <input type="text" name="dosage_2" value="40mg QD PO" id="id_dosage_2" />
    <BLANKLINE>
    med_3: <input type="text" name="med_3" id="id_med_3" /> <input type="text" name="dosage_3" id="id_dosage_3" />
    <BLANKLINE>
    med_4: <input type="text" name="med_4" id="id_med_4" /> <input type="text" name="dosage_4" id="id_dosage_4" />
    <BLANKLINE>
    >>>
    """
    def __init__(self, *args, **kwargs):
        number_of_meds = kwargs.pop('number_of_meds', 4)
        super(MedForm, self).__init__(*args, **kwargs)
        self.med_list = []
        for i in range(1, number_of_meds+1):
            k1 = 'med_%d' % i
            self.fields[k1] = forms.CharField(required=False, label=k1)
            self.fields[k1].bf = BoundField(self, self.fields[k1], k1)
            k2 = 'dosage_%d' % i
            self.fields[k2] = forms.CharField(required=False, label=k2)
            self.fields[k2].bf = BoundField(self, self.fields[k2], k2)
            self.med_list.append({'name': self.fields[k1],
                                  'dosage': self.fields[k2]})

if __name__ == '__main__':
    import doctest
    doctest.testmod()