In der Vorlage, das travels
Feld als tatsächlich eine Instanz von BoundField
(das ein Django Objekt ist, das das Feld und seinen Wert für das Rendering bindet zusammen). Dies bedeutet, dass die Eigenschaften etwas anders sind.
Um die Auswahl als Tupel iterieren:
{% for choice_id, choice_label in form.travels.field.choices %}
{{ choice_id }} = {{ choice_label }} <br/>
{% endfor %}
Produces: 1 = One
2 = Two
Hoffnung, die hilft:
{% for choice in form.travels.field.choices %}
{{ choice }} -
{% endfor %}
Produces: (1, 'One') - (2, 'Two') -
Um die Elemente in der Wahl Tupel getrennt iterieren. Allerdings bin ich mir nicht sicher, in welchem Kontext Sie dies tun müssen. Auf der Oberfläche scheint es nicht sehr djangoartig zu sein. Sie können feststellen, dass die Verwendung eines benutzerdefinierten Formularfelds oder eines benutzerdefinierten Vorlagen-Tags eine portablere, wiederverwendbare Implementierung bietet, die die beabsichtigte Trennung von Ansichtscode und Vorlagencode von django besser beibehält. Natürlich, YMMV und es könnte gut sein, dass der direkte Iterationsansatz für Sie in diesem Fall geeignet ist.
Ich weiß, das ist alt, aber gibt es eine Möglichkeit zu bestimmen, ob das Feld ausgewählt ist? –
Seien Sie zunächst vorsichtig, wenn Sie ein benutzerdefiniertes Widget verwenden. Feldoptionen und Widgetoptionen sind möglicherweise nicht identisch. Sie müssen also "form.travels.field.widget.choices" verwenden. –
Zweitens, für die benutzerdefinierte Auswahl, wenn Sie ein Radio-Widget verwenden, müssen Sie jeden Wert gegen den Feldwert überprüfen und die Eingabe auf "Überprüft" setzen, wenn sie übereinstimmen. Beispiel: "{% if form.travels.value = wahl_id%} checked =" checked "{% endif%}". –