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

Posted

技术标签:

【中文标题】从模型中显示(在模板中)选择 - Django【英文标题】:Display (in Template) choice from Model - Django 【发布时间】:2018-10-19 02:29:48 【问题描述】:

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

【问题讨论】:

在视图中:my_model = Model.objects.values('cat').distinct() 和模板 % for i in my_model % i.cat % endfor % 【参考方案1】:

这对我有用。从模型传递到模板下拉列表

模型.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>

【讨论】:

【参考方案2】:

@TommyL 说:views.py

my_model = Model.objects.values('cat').distinct()

template.html:

% for i in my_model % 
     i.cat  
% endfor %

这个解决方案适合我

【讨论】:

【参考方案3】:

如果你只是想在那里选择,你不需要查询数据库,只需在上下文中传递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 %

【讨论】:

【参考方案4】:

我以为您问的是如何在模板中显示值。 因此,如果您想从您的模型中获取 cat,这应该适用于 values_list()distinct()

def cat(request):
    my_model = Model.objects.values_list('field_name').distinct()
    return render(...'my_model': my_model)

【讨论】:

我想调用从模板到模型的选择,很抱歉在我的问题结尾处混淆了句子:( 你能用你尝试过的真实值和预期输出的例子来编辑你的问题【参考方案5】:

您可以在查询中使用 .distinct(),例如:

Model.objects.all().distinct()

见:https://docs.djangoproject.com/en/2.0/ref/models/querysets/#distinct

【讨论】:

在他的例子中:Model.objects.values('cat').distinct()

以上是关于从模型中显示(在模板中)选择 - Django的主要内容,如果未能解决你的问题,请参考以下文章

如何让下拉选择从 Django 模型中填充模板中的 DataTables 表?

如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id

我们可以格式化模型表单如何在模板上的 Django 中显示吗

我们可以格式化模型表单如何在模板上的 Django 中显示吗

基于选择的 Django 模板/ChoiceField 显示字段

Django 模板:使用 get_FOO_display() 强制选择字段并打印显示值