from django import forms import transport from hid.constants import ITEM_TYPE_CATEGORY class AddEditItemForm(forms.Form): id = forms.CharField( widget=forms.HiddenInput, required=True ) body = forms.CharField( widget=forms.Textarea, required=True ) timestamp = forms.DateTimeField(required=True) next = forms.CharField( widget=forms.HiddenInput, required=True ) def __init__(self, item_type, *args, **kwargs): """ Add extra fields depending on item_type """ super(AddEditItemForm, self).__init__(*args, **kwargs) if item_type in ITEM_TYPE_CATEGORY: terms = transport.terms.list( taxonomy=ITEM_TYPE_CATEGORY[item_type] ) choices = (('', '-----'),) choices += tuple((t['name'], t['name']) for t in terms) self.fields['category'] = forms.ChoiceField( choices=choices ) # The template already has support for optional fields: # 'region' (select) # 'tags' (text input)