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

商品添加至Wishlist后不显示的问题排查求助

心愿单添加功能修复方案

问题排查与修复步骤

1. 添加商品的核心逻辑缺失

你的add_to_wishlist视图仅获取了产品对象,但完全没有执行「将商品加入心愿单」的操作,这是商品不显示的根本原因。

修复后的add_to_wishlist视图:

@login_required
def add_to_wishlist(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    # 获取或创建当前用户的心愿单实例
    wishlist, created = Wishlist.objects.get_or_create(user=request.user.userprofile)
    # 将商品添加到心愿单
    wishlist.product.add(product)
    return redirect('wishlist')

2. 心愿单视图未传递上下文变量

wishlist视图中已获取wishlist对象,但未将其传入模板,导致模板无法读取心愿单内的商品数据。

修复后的wishlist视图:

@login_required
def wishlist(request):
    wishlist, created = Wishlist.objects.get_or_create(user=request.user.userprofile)
    # 将wishlist对象传递给模板上下文
    return render(request, 'products/wishlist.html', {'wishlist': wishlist})

3. 模型字段名与模板引用不匹配

Wishlist模型中ManyToMany字段名为product(单数),但模板里使用wishlist.products.all(复数),导致模板无法正确读取数据。

两种修复方案任选其一:

  • 方案一:修改模型字段名(更符合Django命名惯例):
class Wishlist(models.Model):
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    products = models.ManyToManyField(Product, blank=True)  # 改为复数products
  • 方案二:修改模板中的引用为单数:
{% if wishlist.product.all %}
    {% for product in wishlist.product.all %}
        <!-- 商品展示代码 -->
    {% endfor %}
{% else %}
    <p>你的心愿单是空的。</p>
{% endif %}

4. 移除商品后的重定向错误

remove_from_wishlist视图重定向到了add_to_wishlist,逻辑错误,应重定向到心愿单页面。

修复后的remove_from_wishlist视图:

@login_required
def remove_from_wishlist(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    wishlist = Wishlist.objects.get(user=request.user.userprofile)
    wishlist.product.remove(product)
    return redirect('wishlist')  # 重定向到心愿单页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:37