2017-07-03 7 views
0

Ich habe eine Reihe von Auswahlfeld Formularfelder, die ich in der Vorlage mit benutzerdefinierten Markup als Liste ausgeben muss. Dazu habe ich einen Include erstellt, der das aktuelle Formularfeld als Argument übergeben wird.Django Vergleich Formularfeld Wert mit ausgewählten Wert

Ich kann die Liste der Optionen durchlaufen, um die Liste ohne Probleme zu erstellen. Mein Problem ist, dass ich über der Liste der Optionen entweder die Formularbezeichnung oder den aktuell ausgewählten Wert anzeigen muss. Dies ist der Code, den ich habe, dies zu tun:

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

Wenn zum Beispiel value in dem obigen Code ist 1, und field.value ist auch 1, wird der Gleichheitstest nicht funktioniert und das Bit Code innerhalb der if-Anweisung wird nicht ausgeführt. Ich vermutete, es auf den Datentyp der beiden Werte sein könnte ich den Vergleich, also versuchte ich sowohl auf eine ganze Zahl Gießen wie folgt:

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

Dieser arbeitete für den Fall in Ordnung, wo die Werte in der Auswahlbox waren Ganzzahlen. Manchmal haben meine Auswahlfelder boolesche Werte als Wert, daher funktioniert der Vergleich in diesem Fall nicht mit dem angewandten Ganzzahl-Casting.

Wie kann ich die beiden Werte vergleichen, unabhängig davon, welche Art von Daten verglichen werden?

Antwort

0

Ich denke, ich habe die Antwort gefunden.

Das Problem ist, dass der ausgewählte Wert immer eine Zeichenfolge ist, und der Wert im Forloop könnte eine ganze Zahl oder ein boolescher Wert (oder möglicherweise andere Datentypen) sein. Die Antwort besteht darin, den Wert im Forloop in eine Zeichenfolge umzuwandeln:

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