我有两个不相等的列表,我已将其压缩并从我的视图中将其作为上下文传递。在我的模板中,我有一个多选下拉列表,我想比较值并在下拉列表中显示所选内容。但是我无法实现这一点。 这是我的代码: - 第一个清单: -
university_all_list = Universities.objects.using('cms').all()
第二个清单: -
university_ids_list = []
school_university_mapping = SchoolAdminUniversityMappings.objects.filter(userId=cms_user)
for university_ids in school_university_mapping:
university_ids_list.append(university_ids.universityId)
print university_ids_list
梳理两个清单: -
zip_list = zip(university_all_list, cycle(university_ids_list)) if len(university_all_list) > len(
university_ids_list) else zip(cycle(university_all_list), university_ids_list)
现在,在模板中使用该zip_list: -
<div class="col-sm-8 multiselect_container">
<select class="mutisel" id="first_select" multiple="multiple"
value="university_all_list.id"
name="universityId"
id="userName" required>
{% for university,id in zip_list %}
{% if id == university.id %}
<option value="{{ university.id }}"
selected>{{ university.name }}</option>
{% else %}
<option value="{{ university.id }}"
>{{ university.name }}</option>
{% endif %}
{% endfor %}
</select>
<script>
$("select.mutisel").multipleSelect({
filter: true,
placeholder: "Select",
});
</script>
</div>
但是在多选中没有选择任何下拉列表。
答案 0 :(得分:1)
在处理不等长的列表时,你应该使用itertool izip_longest
创建一个聚合来自每个迭代的元素的迭代器。 如果迭代的长度不均匀,则填充缺失值 有fillvalue。迭代继续,直到最长的可迭代为止 耗尽。
正如文档中所建议的那样,您需要为缺少的条目设置默认值。
说过最不常见的是需要将zip或izip_longest与数据库记录一起使用。使用Django ORM完全支持的连接可以在数据库级别轻松处理这种情况。 Universities
和SchoolAdminUniversityMappings
之间的关系是什么?你明确地声明了吗?