Django模板多个for循环

时间:2019-03-10 07:23:01

标签: django django-templates

我有一个元组,其中包含多种颜色及其代码:

color_list = (
    ('#CD5C5C', 'Indian Red'),
    ('#F08080', 'Light Coral'),
    ('#FA8072', 'Salmon'),
        ................
   )

这是模型:

class ColorList(models.Model):
    color = models.CharField(choices=color_list, max_length=10)

class Product(models.Model):
    color_list = models.ManyToManyField(ColorList)

视图:

def product_edit(request, pk):
    product = get_object_or_404(Product.objects.prefetch_related('color_list'), pk=pk)
    context = {'product': product,'color_list': color_list}
    return render(request, 'admin/product/product_edit.html', context)

现在,我想使用以下形式在模板中编辑以前保存的数据:

<div class="form-group">
     <label><strong>Color List</strong></label>
      <select name="color_list" class="form-control selectpicker" multiple  data-live-search="true" >
          {% for key, value in color_list %}
                {% for pro_color in product.color_list.all %}
                     <option value="{{ key }}" {% if pro_color.color == key %} selected {% endif %}>
                       {{ value }}
                      </option>
                 {% endfor %}
           {% endfor %}
        </select>
</div>

我想显示以前选择的颜色以及其他颜色选项,但是使用此模板代码,它会生成多个重复的<options>。因此,问题在于如何在具有预选颜色<options>的模板中使用多个for循环?

2 个答案:

答案 0 :(得分:0)

颜色重复的原因是因为不必要地嵌套了两个循环来获取键/值对。您可以改用.get_FOO_display()

<div class="form-group">
     <label><strong>Color List</strong></label>
      <select name="color_list" class="form-control selectpicker" multiple  data-live-search="true" >
                {% for pro_color in product.color_list.all %}
                     <option value="{{ pro_color.get_color_display }}" {% if pro_color.color == color_list.color %} selected {% endif %}>
                       {{ pro_color.color }}
                      </option>
                 {% endfor %}
        </select>
</div>
  

https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display

答案 1 :(得分:0)

有关编辑相关问题,请参阅Django Admin模板>编辑用户

可能的网址为:http://localhost:8000/admin/auth/user/{id}/change/

此处具有Select Many的“他们具有权限”列,因此也保留了刷新时的值。