Django: Почему опция не отображается как выбранная? - PullRequest
0 голосов
/ 11 сентября 2018

РЕДАКТИРОВАНИЕ:

В моем HTML-шаблоне у меня есть элемент управления select, и я хочу установить выбранную опцию на основе переменной {{specialtyId}}.Ожидаемый результат состоит в том, что выбранная опция будет выбрана, но фактический результат - то, что никакая опция не будет выбрана.

Просто чтобы убедиться, что это был не только элемент управления select, я также использоваланалогичный цикл для генерации меток с «выбранным» или «не выбранным» на основе теста оператора if.

Вот код:

<label>{{specialtyId}} was selected</label>
<br>
{% for s in specialties %}
    <label>{{s.specialtyId}} {{s.specialtyName}} {% if s.specialtyId == specialtyId %} selected {% else %} not selected {% endif %}</label><br>
{% endfor %}

<select class="form-control" id="specialtyId" name="specialtyId" required="True">
{% for s in specialties %}
    <option value="{{s.specialtyId}}" {% if s.specialtyId == specialtyId %} selected {% endif %}>{{s.specialtyName}}</option>
{% endfor %}
</select>

Вот снимок экранафактическое выбранное значение, сгенерированные метки и выпадающий список.Даже если specialtyId явно равно 2 из выходных данных 2 was selected, обе метки не "выбраны", и нет опций выпадающего меню enter image description here.

Итак, я сделализменение, предложенное в ответе «подтвердила голос» ниже, перезапустило браузер и очистило кеш, но все равно не увенчалось успехом.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Хотя ответ @Bestasttung был верным, этого было недостаточно для решения проблемы.Я попробовал это:

{% if s.specialtyId == 2 %}

, который сразу сделал второй, и только второй, выбранный вариант.В тот момент я понял, что каким-то образом

{% if s.specialtyId == specialtyId %}

никогда не было правдой, и это оказалось из-за разных типов данных .Я изменил свой класс, содержащийся в словаре, на тип Charfield вместо IntegerField

class SpecialtyListResult:
    specialtyId = models.CharField()
    specialtyName = models.CharField(max_length=40)

, а затем изменил способ его заполнения курсором базы данных на строковый тип:

for row in curs:
    slr = SpecialtyListResult()
    slr.specialtyId = str(row[0])
    slr.specialtyName = row[1]
    list_specialties.append(slr)

И теперь это работает.

0 голосов
/ 11 сентября 2018

Вам нужно изменить:

{% if value == specialtyId %}

Кому:

{% if s.specialtyId == specialtyId %}

Value здесь делать нечего.

edit : если это все еще не работает, проверьте, что s.specialtyId и specialtyId можно сравнить (например: строка 2 не равна целому числу 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...