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
相关产品推荐
相关产品推荐

