2017-07-03 44 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 %}