2017-07-03 43 views
0

我有一些选择框表单域,我需要在模板中输出自定义标记作为列表。为此,我创建了一个包含它作为参数传递当前表单域的内容。Django比较表单字段值与选定的值

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

{% 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 %}

这工作得很好的情况下选择框中的值是整数。但是,有时候我的选择框会有布尔值作为值,所以在这种情况下,比较将不适用于应用的整型转换。

如何安全地比较两个值,无论正在比较哪种类型的数据?

回答

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 %}