Django Forms Gotcha
Well, I just wasted 4 good hours of my time thinking I was facing a bug. I set the prefix for a form while trying to set the initial value for for a field. Only the first instance of the instantiated form would include the initial value. This code illustrates my problem:
from django import forms
class MyForm(forms.Form):
names = forms.CharField(required=False)
id = forms.CharField(widget=forms.HiddenInput,required=False)
print [MyForm({'id':y},prefix=y).as_p() for y in range(2)]
#output:
#
#[u'<p><label for="id_names">Names:</label> <input type="text" name="names" #id="id_names" /><input type="hidden" name="id" value="0" id="id_id" /></p>',
# u'<p><label for="id_1-names">Names:</label> <input type="text" name="1-names" #id="id_1-names" /><input type="hidden" name="1-id" id="id_1-id" /></p>']
#
# Notice how 2nd form instance doesnt have value=1 for hidden input field.
Solution was simple. Thanks to the guys at #django on freenode, all I needed to do was instantiate my form as such:
MyForm(initial={'id':y})
That fixed it for me. I was told that when using data=, I need to match the data key to field name including the prefix. With initial keyword, you dynamically set that.






Comments