Django 表单提交单选按钮值显示为 None



我有一个这样的django形式:

class HelpForm (forms.form):
queue = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control'}),
label=_('What can we help you with today?'),
required=True,
choices=()
)

此窗体的选项填充在视图中,如下所示:

form = HelpForm(initial=initial_data)
form.fields['queue'].choices = [(q.id, q.title) for q in Queue.objects.filter(allow_public_submission=True)] + 
[('', 'Other')]

当调用为{{form.queue}}时,此表单在模板中的默认呈现是一个下拉列表。但是我需要它作为单选按钮字段,所以我在我的模板中为每个下拉值做了这个:

<input type="radio" name="help_form" id="order_issues" value="{{form.queue.field.choices.2.0}}"/>
<label for="id_order_issues">{{form.queue.field.choices.2.1}}</label>

现在,当我提交此表单时,即使我进行了选择,queue值也会显示为None,并且由于这是必填字段,表单提交失败。当然,表单还有其他字段,它们按预期工作。我做错了什么?任何帮助将不胜感激!

您必须首先将ChoiceField实例与模板同步,例如将字段重命名为order_issues

class HelpForm (forms.form):
order_issues = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control'}),
label=_('What can we help you with today?'),
required=True,
choices=()
)

当然,观点也必须改变:

form = HelpForm(initial=initial_data)
form.fields['order_issues'].choices = [(q.id, q.title) for q in Queue.objects.filter(allow_public_submission=True)] + 
[('', 'Other')]

最后是模板:

<input type="radio" name="order_issues" id="id_order_issues" value="{{form.order_issues.field.choices.2.0}}"/>
<label for="id_order_issues">{{form.order_issues.field.choices.2.1}}</label>

你的代码不起作用,因为 django 需要inputname属性等于表单类中定义的名称,并且inputid属性必须以id_field_name 为前缀

HTML 内容:这是额外的,但了解标签对输入标签的影响可能很有用。

最新更新