11

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

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

我正在使用 ModelForm 生成“新用户”HTML 表单。我的 Google-fu 似乎让我失望了——我怎样才能让这个 HTML 表单在下拉框中默认选中“男性”项目?(即selected="selected"这个项目。)

4

2 回答 2

16

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

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

-或者-

您可以使用 Forms API 的声明性来覆盖 ModelForm 的某些属性。但是,对于这个用例来说,这可能有点麻烦,我提到它只是为了向您展示您可以做到。将来您可能会发现此功能的其他用途。

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

-或者-

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

form = MyModelForm (instance=someinst)
于 2009-03-08T21:45:42.670 回答
8

肯定default会成功吗?

例如

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
于 2009-03-08T21:19:46.913 回答