我需要调用模板模型中的选择字段 的 models.py :
...
CAT = (
("1", "1"),
("2", "2"),
)
cat = models.CharField(max_length=2, choices=TYPE, default="")
...
views.py :
def cat(request):
my_model = Model.objects.all()
return render(...{'post': post})
template.html :
{% for i in my_model%}
{{ i.cat }}
# This shows DUPLICATES if I have couple posts with same cat.
# I want to display uniques in choices (I am not interested in posts at all)
{% endfor %}
那么如何从模板中调用模型中的选项,而不显示重复项?
P.S :我通过了选择文档,没有任何帮助:https://docs.djangoproject.com/en/2.0/ref/models/fields/#choices
答案 0 :(得分:0)
您可以在查询中使用.distinct(),例如:
Model.objects.all().distinct()
请参阅:https://docs.djangoproject.com/en/2.0/ref/models/querysets/#distinct
答案 1 :(得分:0)
我以为你在询问如何在模板中显示价值
因此,如果您想从模型中获取cat
,那么应该使用values_list()
和distinct()
def cat(request):
my_model = Model.objects.values_list('field_name').distinct()
return render(...{'my_model': my_model})
答案 2 :(得分:0)
如果你只想在那里做出选择,你不需要查询数据库,只需在上下文中传递CAT
个选项。
def cat(request):
my_model = Model.objects.all()
return render(...{'post': post, 'cats': Model.CAT})
并在您的模板中循环cats
{% for item in cats %}
{{ item.0 }} {{ item.1 }}
{% endfor %}
答案 3 :(得分:0)
my_model = Model.objects.values('cat').distinct()
<强> template.html:强>
{% for i in my_model %}
{{ i.cat }}
{% endfor %}
此解决方案适用于我
答案 4 :(得分:0)
这对我有用。从模型传递到模板下拉列表
models.py
Class MyCategory(models.Model):
CAT_CHOICES=(
('1','1'),
('2','2'),
)
category=models.charField(max_length=2,choices=CAT_CHOICES)
views.py
def view_category(request):
category_choices=MyCategory.CAT_CHOICES
template_name='your_template.html'
context={'category':category_choices}
return render(request,template_name,context)
模板
<html>
<head>
<title>category</title>
</head>
<body>
<select name="category">
{%for mykey,myvalue in category %}
<option value="{{mykey}}">{{myvalue}}</option>
{%endfor%}
</select>
</body>
</html>