Django新手求助:如何从搜索结果中获取唯一分类名称?
从搜索结果中获取唯一分类名称的方法
针对你的需求,有两种简单的实现方式,直接替换代码里的context['categorys'] = ===>> Here <<===即可:
方法一:直接获取分类名称列表
如果只需要category_name的字符串列表,用下面的代码:
context['categorys'] = search_result.values_list('category__category_name', flat=True).distinct()
values_list('category__category_name', flat=True):提取关联分类的名称字段,返回一维字符串列表distinct():自动去除重复的分类名称
方法二:获取完整的分类对象(推荐)
如果后续需要用到分类的其他属性(比如logo、slug),建议获取完整的Category对象:
context['categorys'] = Category.objects.filter(products__in=search_result).distinct()
之后在模板中可以这样调用分类名称:
{% for category in categorys %} {{ category.category_name }} {% endfor %}
注意事项
- 你的
Product模型中category字段已设置related_name="Products",所以反向查询用products__in(Django会自动将大写的Products转为小写用于查询) - 必须加上
distinct(),避免出现重复的分类
内容的提问来源于stack exchange,提问作者Partho Debnath
相关产品推荐
相关产品推荐

