You need to enable JavaScript to run this app. Python Django如何在购物车(CART)页面展示分类关联商品
优惠活动
大模型
产品
解决方案
定价
更多

Python Django如何在购物车(CART)页面展示分类关联商品

实现方案

1. 调整购物车视图逻辑

核心逻辑为:先提取当前购物车所有商品的分类,再查询同分类下未加入购物车的商品,传递到模板层。
以下是示例代码(假设你用常见的Order+OrderItem结构存储购物车数据,可根据你实际的购物车实现调整):

from django.db.models import Q
from .models import Item, Order, OrderItem

def cart_view(request):
    # 原有获取购物车的逻辑
    order = Order.objects.filter(user=request.user, ordered=False).first()
    cart_items = order.items.all() if order else []
    
    # === 新增相关商品查询逻辑开始 ===
    related_items = []
    if cart_items.exists():
        # 提取购物车所有商品的分类,去重
        cart_categories = cart_items.values_list('item__category', flat=True).distinct()
        # 提取购物车所有商品的ID,用于排除已加购商品
        cart_item_ids = cart_items.values_list('item__id', flat=True)
        # 查询同分类、未加购的商品,最多展示12个,可自行调整数量
        related_items = Item.objects.filter(
            category__in=cart_categories
        ).exclude(id__in=cart_item_ids)[:12]
    # === 新增相关商品查询逻辑结束 ===

    return render(request, 'cart.html', {'order': order, 'related_items': related_items})

2. 修改购物车模板

在购物车页面底部的合适位置,添加相关商品的渲染代码,示例如下:

{% if related_items %}
<div class="related-products-section">
  <h3>你可能还喜欢</h3>
  <div class="products-grid">
    {% for item in related_items %}
    <div class="product-card">
      <img src="{{ item.image.url }}" alt="{{ item.title }}">
      <h4>{{ item.title }}</h4>
      <p>¥{{ item.discount_price|default:item.price }}</p>
      <a href="{% url 'product_detail' item.slug %}" class="btn">查看详情</a>
    </div>
    {% endfor %}
  </div>
</div>
{% endif %}

根据你的页面样式调整对应的类名和布局即可。

可选优化点

  • 如果购物车包含多个分类的商品,可以先统计各分类的商品数量,优先展示占比最高的分类下的商品
  • 可给查询添加.order_by('?')实现随机展示相关商品,每次进入购物车都能看到不同的推荐
  • 若购物车为空时仍想展示推荐,可以改为查询全站销量最高的热门商品

内容的提问来源于stack exchange,提问作者bc150401142 Ghulam Nabi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:45:04