Django将表单字段值与选定值

时间:2017-07-03 19:42:28

标签: django-templates

我有许多选择框表单字段,我需要在模板中输出自定义标记作为列表。为此,我创建了一个include,它将当前表单字段作为参数传递。

我可以遍历选项列表来创建我想要的列表而不会出现任何问题。我的问题是,在选项列表上方,我需要显示表单标签或当前选定的值。这是我必须执行此操作的代码:

{% if field.value %}
    {% for value, option in field.field.choices %}
        {% if value == field.value %}
            {{ option }}
        {% endif %}
    {% endfor %}
{% else %}
    {{ field.label }}
{% endif %}

例如,如果上面代码中的value为1,并且field.value也为1,则相等性测试不起作用,并且if语句中的代码位不会被执行。我猜测它可能归结为我所比较的两个值的数据类型,所以我尝试将两者都转换为整数,如下所示:

{% if field.value %}
    {% for value, option in field.field.choices %}
        {% if value|add:"0" == field.value|add:"0" %}
            {{ option }}
        {% endif %}
    {% endfor %}
{% else %}
    {{ field.label }}
{% endif %}

这适用于选择框中的值为整数的情况。但是,有时我的选择框会将布尔值作为值,因此在这种情况下,比较将不适用于应用的整数转换。

无论比较什么类型的数据,我如何安全地比较这两个值?

1 个答案:

答案 0 :(得分:0)

我想我找到了答案。

问题是所选值始终是一个字符串,并且forloop中的值可以是整数或布尔值(或可能是其他数据类型)。答案是将forloop中的值转换为字符串:

{% if field.value %}
    {% for value, option in field.field.choices %}
        {% if value|stringformat:"s" == field.value %}
            {{ option }}
        {% endif %}
    {% endfor %}
{% else %}
    {{ field.label }}
{% endif %}