首页 > 解决方案 > 在 django 模板的下拉列表中显示已选择的项目

问题描述

嗨,我有一个这样的下拉菜单

           <select name="category" data-placeholder="select Category here" multiple
                class="chosen-select" tabindex="8" required>
                <option value=""></option>
                <option>Transport</option>
                <option>Accommodation</option>
                <option>Ware House</option>
                <option>Readymade</option>
            </select>

我正在从数据库过滤器查询中获取此下拉列表的选定元素,如下所示

categories=Categories.objects.filter(vendor=uid)

当我这样循环时

 {% for category in categories %}
    <option value=""></option>
    <option value="{{ category.category }}"{% if category.category == 'Transport' %}selected{% endif %}>Transport</option>
    <option value="{{ category.category }}"{% if category.category == 'Accommodation' %}selected{% endif %}>Accommodation</option>
    <option value="{{ category.category }}"{% if category.category == 'Activity' %}selected{% endif %} >Activity</option>
   <option  value="{{ category.category }}"{% if category.category == 'Readymade' %}selected{% endif %}>Pre Packaged Plan</option>
                         </option>
                     {% endfor %}

在这种情况下,例如,如果我在数据库中选择了 2 个选项,那么它会打印两次选项,但选择的结果是正确的。任何帮助将不胜感激,谢谢。

标签: djangodjango-templatesmulti-select

解决方案


如果categories是您要选择的类别的列表,那么您可以将其设为列表 ( category_names = [category.category for category in categories]),并且在您的 HTML 中,不要迭代categories(这将导致 N 次类别),而是检查每个选项是否在选定列表中:

<select ...>
    <option value=""></option>
    <option value="Transport" {% if 'Transport' in category_names %}selected{% endif %}>Transport</option>
    <option value="Accommodation" {% if 'Accommodation' in category_names %}selected{% endif %}>Accommodation</option>
    ...etc
</select>

现在,如果您需要<select>使用类别名称动态填充它,那是另一个问题,但这不是我解释这个问题的方式。


推荐阅读