Reputation: 17723
I am working on a Django app. One of my models, "User", includes a "gender" field, as defined below:
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True)
I am using a ModelForm to generate a "new user" HTML form. My Google-fu seems to be failing me -- how can I make this HTML form have the "Male" item selected by default in the drop-down box? (i.e. so selected="selected"
for this item.)
Upvotes: 11
Views: 8889
Reputation: 28948
If you need a blank form with a default value selected, then pass an 'initial' dictionary to the constructor of your model form using the name of your field as the key:
form = MyModelForm (initial={'gender':'M'})
-OR-
You can override certain attributes of a ModelForm using the declarative nature of the Forms API. However, this is probably a little cumbersome for this use case and I mention it only to show you that you can do it. You may find other uses for this in the future.
class MyModelForm (forms.ModelForm):
gender = forms.ChoiceField (choices=..., initial='M', ...)
class Meta:
model=MyModel
-OR-
If you want a ModelForm that is bound to a particular instance of your model, you can pass an 'instance' of your model which causes Django to pull the selected value from that model.
form = MyModelForm (instance=someinst)
Upvotes: 16
Reputation: 9058
Surely default
will do the trick?
e.g.
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
Upvotes: 8