在 django 模板的下拉列表中显示已选择的项目

Show already selected item in dropdown in django template

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

           <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 个选项,那么它会打印两次选项,但选择的结果是正确的。非常感谢任何帮助。

如果 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>,那是另一个问题,但这不是我解释这个问题的方式。