You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中调用模型choices字段并去重显示?

解决Django模板中显示Choices唯一选项的问题

嘿,我来帮你搞定这个需求!先纠正下你代码里的两个小笔误:models里的choices=TYPE应该是choices=CAT,还有views里返回的上下文应该是{'my_model': my_model}而不是{'post': post},不然模板里会找不到变量哦。

根据你“完全不关注帖子本身,只想显示Choices里的唯一选项”的需求,给你两种实用方案:

方案一:直接调用模型定义的Choices常量(最推荐)

既然你根本不需要帖子数据,那完全没必要从数据库查所有帖子再去重,直接把模型里定义的CAT Choices传到模板就好:

第一步:修改views.py

from .models import Model  # 导入你的模型类

def cat(request):
    # 直接把模型里的CAT Choices取出来传到模板
    cat_options = Model.CAT
    return render(request, 'template.html', {'cat_options': cat_options})

第二步:修改template.html

{% for value, label in cat_options %}
    {{ label }}  <!-- 这里显示的是Choices里的标签,比如你定义的"1"、"2";如果要显示存到数据库里的value就用{{ value }} -->
{% endfor %}

这样不管数据库里有没有对应帖子,都会显示你在模型里定义的所有Choices选项,完美匹配你的需求。

方案二:只显示数据库中实际使用过的唯一选项

如果你只想展示数据库里已经有帖子用到的cat选项,那可以用Django的distinct()查询来去重:

第一步:修改views.py

from .models import Model

def cat(request):
    # 提取数据库中cat字段的唯一值,flat=True让结果是一个列表而不是元组
    unique_cat_values = Model.objects.values_list('cat', flat=True).distinct()
    # 把这些值和Choices里的标签对应起来
    cat_choices_dict = dict(Model.CAT)
    used_cat_options = [(val, cat_choices_dict[val]) for val in unique_cat_values if val in cat_choices_dict]
    return render(request, 'template.html', {'used_cat_options': used_cat_options})

第二步:修改template.html

{% for value, label in used_cat_options %}
    {{ label }}
{% endfor %}

另外提一句,不推荐在模板里做去重逻辑(比如用自定义标签存已见过的值),因为Django的设计理念是让视图层处理逻辑,模板只负责展示,这样代码更清晰易维护。

内容的提问来源于stack exchange,提问作者Belloz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:27:14