代码之家  ›  专栏  ›  技术社区  ›  TomServo

Django:为什么选项不能呈现为选中状态?

  •  0
  • TomServo  · 技术社区  · 6 年前

    编辑:

    在我的html模板中,我有一个select控件,希望根据变量设置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 回复  |  直到 6 年前
        1
  •  4
  •   Bestasttung    6 年前

    你需要改变:

    {% if value == specialtyId %}
    

    致:

    {% if s.specialtyId == specialtyId %}
    

    Value 与此无关。

    编辑 :如果仍然不起作用,请检查 s.specialtyId specialtyId 可以比较(例如:字符串2不等于整数2)。

        2
  •  0
  •   TomServo    6 年前

    尽管@bestasttong的答案是正确的,但这并不足以解决问题。我试过这个:

    {% if s.specialtyId == 2 %}
    

    这立即使第二个选项被选中,而且只有第二个选项被选中。在那一刻,我意识到

    {% if s.specialtyId == specialtyId %}
    

    从来都不是真的 结果是因为不同的数据类型 1.我把字典里的班级改成了 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)
    

    它现在起作用了。