Django 表单。使前端 <select> 需要 ChoiceField

Posted

技术标签:

【中文标题】Django 表单。使前端 <select> 需要 ChoiceField【英文标题】:Django forms. Make ChoiceField required on frontend <select> 【发布时间】:2021-09-18 18:18:19 【问题描述】:

我创建了一个使用 ChoiceField 的 Django 表单:

control_model = forms.ChoiceField(choices=(), required=True)

(“选择”为空的原因是因为它们是使用基于我的后端数据库的函数设置的)

以下是整个表格:

class CreateWorkflowForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
      super(CreateWorkflowForm, self).__init__(*args, **kwargs)
      self.request = kwargs.pop("request")
      self.fields['control_model'].choices = my_function()
 
   control_model = forms.ChoiceField(choices=(), required=True)
   class Meta:
      model = CreateWorkflowModel
      fields = ['control_model']

使用的模型如下所示:

class CreateWorkflowModel(models.Model):
   control_model = models.CharField(max_length=100)

我在 Django 模板中使用此表单的方式如下:

<div class="form-content">
   form.media 
   form.as_p 
  <input type="submit" id="id_submit" value="Submit" />
</div>

但是在我的网页上,与我的 ChoiceField 对应的 &lt;select&gt; 没有“必需”属性:

这意味着如果没有值输入到 ChoiceField 中,我的表单将失败(因为它在表单中是必需的)但是我更希望前端出现一个弹出框,说明“您需要在此字段上输入一个值” .

我知道在 &lt;select&gt; 上设置“必需”值可以做到这一点,但我不知道如何让 django 生成具有此属性的 &lt;select&gt;

【问题讨论】:

尝试添加空值的首选 @PavloNaumenko 这行得通。谢谢 【参考方案1】:

如果你在你的选择中需要 required 属性,你必须首先选择具有空值的元素,否则它是无效的 html。 见小部件的source code

【讨论】:

以上是关于Django 表单。使前端 <select> 需要 ChoiceField的主要内容,如果未能解决你的问题,请参考以下文章

Django - 如何使日期选择器在更改时提交表单

如何使不同的 Django 表单输入按钮显示在同一行

Django---form表单的应用渲染

multiple类型的select option在django后台如何取值

如何使用 Django 的表单框架来选择选项?

django - 更改表单的结构,以便输入超出标签