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

时间:2017-10-02 02:53:59

标签: python django forms

我有一个像这样的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,即使我已做出选择并且因为这是必填字段,表单提交也会失败。当然,表单还有其他字段,它们按预期工作。我究竟做错了什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您必须首先将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的{​​{1}}属性等于表单类中定义的名称,name&# 39; s input属性必须以id _ field_name

为前缀

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