You need to enable JavaScript to run this app. Django中如何展示与二级分类(SubCategory)关联的商品列表?
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何展示与二级分类(SubCategory)关联的商品列表?

实现方案

问题说明

你原有代码仅做了关联数据预加载,没有添加二级分类的筛选条件,因此返回了全部关联三级分类的商品。

核心查询逻辑

商品模型Product和三级分类SubChildCategory为多对多关联,SubChildCategory和二级分类SubCategory为外键关联,可通过Django ORM的双下划线跨关系查询,直接按二级分类筛选商品。

代码实现

1. 视图层(views.py)修改

首先定位到需要展示的指定二级分类,可通过路由传参的slug/ID或者固定值匹配,示例代码如下:

from django.shortcuts import get_object_or_404

def home(request):
    # 示例:按slug获取目标二级分类,生产环境用get_object_or_404避免不存在时报错
    target_subcat = get_object_or_404(SubCategory, subcat_slug="你要展示的二级分类slug")
    # 跨表筛选符合条件的商品,distinct()去重避免多对多关联返回重复商品
    subcat_product = Product.objects.filter(
        subcategory__subcategory=target_subcat
    ).prefetch_related('subcategory').distinct()
    return render(request, 'frontend/index.html',{'subcat_product':subcat_product})

2. 动态二级分类适配(可选)

如果需要根据用户点击的不同二级分类动态展示对应商品,可修改路由和视图接收参数:

路由配置(urls.py)

path('subcat-products/<slug:subcat_slug>/', home, name='subcat_product_list')

对应视图修改

def home(request, subcat_slug):
    target_subcat = get_object_or_404(SubCategory, subcat_slug=subcat_slug)
    # 后续查询逻辑和上面一致

3. 模板遍历示例

在frontend/index.html中直接遍历商品列表即可:

{% for product in subcat_product %}
<div class="product-card">
    <h4>{{ product.name }}</h4>
    <p>所属三级分类:
        {% for subchild in product.subcategory.all %}
            {{ subchild.name }}{% if not forloop.last %}、{% endif %}
        {% endfor %}
    </p>
</div>
{% empty %}
<p>当前二级分类下暂无商品</p>
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:54:02