ChoiceField选项的数据属性

时间:2016-02-16 15:09:03

标签: django django-forms

我有一个包含下一个字段的表单:

phone_code = forms.ChoiceField(
        label=_('Phone code'),
        widget=forms.Select(attrs={'class': 'short'})
)

我需要将数据属性添加到<option>以存储每个电话代码的国家/地区代码。我正在尝试以下一种方式执行此操作:在模板中,我将使用下一个方式渲染此字段:

                        <select name="{{ phone_code_field.name }}">
                            {% for choice in phone_code_field.field.extra_data %}
                                <option data-choice-code="{{ choice.0.0 }}" value="{{ choice.0.1 }}">{{ choice.1 }}</option>
                            {% endfor %}
                        </select>

extra_data是一个数据结构  我为每个选项存储电话代码和国家/地区代码。

问题:但在错误验证后,选择的电话代码值是选择器中的首选,而不是最后选择的选项。如果字段由django表单({{ form.phone_code }})自动呈现,则它可以正常工作,但在这种情况下,我必须覆盖Select小部件。我怎么能按照我的方式实现这个呢?

或者我如何在模板中定义应该选择哪个属性?

1 个答案:

答案 0 :(得分:0)

如果您坚持手动渲染字段,则还必须手动确定选择了哪个项目,并在相关项目上输出selected属性。

{% for choice in phone_code_field.field.extra_data %}
    <option {% if phone_code_field.field.value == choice.0.1 %}selected="selected"{% endif %} data-choice-code="{{ choice.0.0 }}" value="{{ choice.0.1 }}">{{ choice.1 }}</option>
{% endfor %}