【问题标题】:How do I make a Django ModelForm menu item selected by default?如何使默认选择的 Django ModelForm 菜单项?
【发布时间】:2010-10-12 01:49:19
【问题描述】:

我正在开发一个 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"。)

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    default 肯定会成功吗?

    例如

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

    【讨论】:

      【解决方案2】:

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

      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)
      

      【讨论】:

      • 我实际上刚刚发现像您在答案中所做的那样传递模型实例不会使 Django 在 HTML 中显示所选值。它适用于文本输入字段就好了,但我也需要它来选择输入。任何想法如何解决这个问题?
      • @GChorn 它也应该适用于选择字段,因此可能还有其他问题。我建议创建一个新问题并发布相关代码,以便让更多人了解。
      • 嗨,乔,感谢您的回复,是的,我昨天确实这样做了,但还没有答案:stackoverflow.com/q/16056045/1256700
      猜你喜欢
      • 1970-01-01
      • 2014-12-10
      • 2013-08-24
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多