我有一个这样的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 需要input
的name
属性等于表单类中定义的名称,并且input
的id
属性必须以id
_field_name 为前缀
HTML 内容:这是额外的,但了解标签对输入标签的影响可能很有用。