DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Changing Django Form Field Properties On Init

09.18.2009
| 16294 views |
  • submit to reddit
        // For changing a form field's properties when the form is
// initialized. This snippet shows how to limit a query set
// for a ModelChoiceField and how to add an attribute to an
// html tag

from django import forms
from mymodels import Group

class MyForm(forms.Form):
    group=forms.ModelChoiceField(queryset=None)
    email=forms.EmailField()
    some_choices=forms.ChoiceField()
    junk=forms.CharField()

    def __init__(self,my_var,*args,**kwrds):
        super(MyForm,self).__init__(*args,**kwrds)
        self.fields['group'].queryset=Group.objects.filter(...)
        self.fields['email'].widget.attrs['size']='50'
        self.fields['email'].help_text='some text'
        self.fields['some_choices'].choices=[[x,x] for x in list_of_stuff]

        # I used this when I wanted to subclass a built-in form and I 
        # wanted to remove this input
        self.fields['junk'].widget=forms.HiddenInput()
    

Comments

Bob La Quey replied on Fri, 2010/02/12 - 9:13pm

Thanks this was a big help to me. I am building SelectCity widget using Javascript to do onchange switching and this was the one missing piece in the puzzle. Note citation and credit in source code. Good for docs, eh? class Locations(models.Model): Municipalities = SerializedDataField(blank=True, null=True) class LocationsForm(ModelForm): Municipalities = forms.ChoiceField(widget=SelectCityWidget()) def __init__(self, choices,*args,**kwrds): super(LocationsForm,self).__init__(*args, **kwrds) self.fields['Municipalities'].choices=choices # see http://snippets.dzone.com/posts/show/7936 for explanation by Chuck Martin class Meta: model=Locations