我有一个元组,其中包含多种颜色及其代码:
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循环?
答案 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
的“他们具有权限”列,因此也保留了刷新时的值。