从模型中显示(在模板中)选择 - Django

时间:2018-05-09 04:18:27

标签: django django-models django-templates django-template-filters

我需要调用模板模型中的选择字段 的 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

5 个答案:

答案 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)

@TommyL说:

views.py

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>