如何在默认情况下选择Django ModelForm菜单项?

时间:2009-03-08 20:56:47

标签: python django django-forms

我正在开发一个Django应用程序。我的一个模型“用户”包括一个“性别”字段,定义如下:

GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True)

我正在使用ModelForm生成“新用户”HTML表单。我的Google-fu似乎让我失望了 - 如何让这个HTML表单在下拉框中默认选中“Male”项? (即此项目为selected="selected"。)

2 个答案:

答案 0 :(得分:16)

如果您需要一个选定默认值的空白表单,请使用您的字段名称作为键将“初始”字典传递给模型表单的构造函数:

form = MyModelForm (initial={'gender':'M'})

-OR -

您可以使用Forms API的声明性质覆盖ModelForm的某些属性。但是,对于这个用例来说这可能有点麻烦,我提到它只是为了告诉你你可以做到这一点。您可能会在将来找到其他用途。

class MyModelForm (forms.ModelForm):
    gender = forms.ChoiceField (choices=..., initial='M', ...)
    class Meta:
        model=MyModel

-OR -

如果您想要一个绑定到模型的特定实例的ModelForm,您可以传递模型的“实例”,这会导致Django从该模型中提取所选值。

form = MyModelForm (instance=someinst)

答案 1 :(得分:8)

肯定default会做到这一点吗?

e.g。

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)