Django:为啥选项不会呈现为选中状态?

Posted

技术标签:

【中文标题】Django:为啥选项不会呈现为选中状态?【英文标题】:Django: Why won't the option render as selected?Django:为什么选项不会呈现为选中状态? 【发布时间】:2019-02-16 02:33:26 【问题描述】:

已编辑:

在我的 html 模板中,我有一个选择控件,并希望根据变量 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 was selected 中的2,但两个标签都没有“选中”,下拉选项 也没有。

所以我已经按照下面赞成的答案中的建议进行了更改,并重新启动了浏览器并清除了缓存,但仍然没有成功。

【问题讨论】:

这里的value 是什么?你能把你传递给渲染的字典的repr(..) 传给你吗? @WillemVanOnsem 专业列表的repr是一个SpecialtyListResult对象的列表,每个对象只是一个整数specialId和一个字符specialName 【参考方案1】:

你需要改变:

% if value == specialtyId %

收件人:

% if s.specialtyId == specialtyId %

Value这里无事。

edit:如果还是不行,检查s.specialtyIdspecialtyId是否可以比较(例如:字符串2不等于整数2)。

【讨论】:

您重新启动并刷新没有缓存的html?【参考方案2】:

虽然@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)

现在可以使用了。

【讨论】:

以上是关于Django:为啥选项不会呈现为选中状态?的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin ForeignKey字段小部件选项和不一致的默认值

复选框QCheckBox

选中Tab控件单击事件,点击tab头,定位到导航栏的选项,为选中状态 ,DevExpress.XtraNavBar.NavBarControl 导航控件定位或选中状态 另导航的选项为选中状态.(代码

winform中让显示的图片覆盖到父窗体保持父窗体的不可选中的状态,且任务栏中不会显示子窗体的任务选项

VSAN为啥声明磁盘选项,我的没有可用磁盘

使用嵌套状态作为ui-router中的选项卡