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

Rex*_*exE 10 python django django-forms

我正在研究Django应用程序.我的一个模型"用户"包括"性别"字段,定义如下:

GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True)
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*way 16

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

form = MyModelForm (initial={'gender':'M'})
Run Code Online (Sandbox Code Playgroud)

-要么-

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

class MyModelForm (forms.ModelForm):
    gender = forms.ChoiceField (choices=..., initial='M', ...)
    class Meta:
        model=MyModel
Run Code Online (Sandbox Code Playgroud)

-要么-

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

form = MyModelForm (instance=someinst)
Run Code Online (Sandbox Code Playgroud)


Joh*_*ery 8

肯定default会做的伎俩?

例如

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
Run Code Online (Sandbox Code Playgroud)