from django import newforms as forms class DynamicFieldSnippetForm(forms.Form): """DynamicFieldSnippetForm - declare a field dynamically in a form. The weight field is required. The height field is optional and not included on the form unless requested. >>> print DynamicFieldSnippetForm() <tr><th><label for="id_weight">Weight:</label></th><td><input type="text" name="weight" id="id_weight" /></td></tr> >>> print DynamicFieldSnippetForm(request_height=True) <tr><th><label for="id_weight">Weight:</label></th><td><input type="text" name="weight" id="id_weight" /></td></tr> <tr><th><label for="id_height">Height:</label></th><td><input type="text" name="height" id="id_height" /></td></tr> >>> print DynamicFieldSnippetForm({'height':174, 'weight':122}, request_height=True) <tr><th><label for="id_weight">Weight:</label></th><td><input type="text" name="weight" value="122" id="id_weight" /></td></tr> <tr><th><label for="id_height">Height:</label></th><td><input type="text" name="height" value="174" id="id_height" /></td></tr> >>> """ def __init__(self, *args, **kwargs): request_height = kwargs.pop('request_height', False) super(DynamicFieldSnippetForm, self).__init__(*args, **kwargs) if request_height: self.fields['height'] = forms.CharField(required=False) weight = forms.CharField() if __name__ == '__main__': import doctest doctest.testmod()