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

Django购物车功能报错:无法为cart.user分配User实例

Django ValueError: Cannot assign "(<SimpleLazyObject: <User: bhavna>>,)": "cart.user" must be a "User" instance

问题详情

在实现购物车功能、为数据表添加ForeignKey关联时,触发如下错误:

ValueError: Cannot assign "(<SimpleLazyObject: <User: bhavna>>,)": "cart.user" must be a "User" instance

相关代码

models.py

from django.conf import settings
User = settings.AUTH_USER_MODEL

class cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    stock = models.ForeignKey(Stock,on_delete=models.CASCADE)
    qty = models.IntegerField()


class Stock(models.Model):
    product_id = models.ForeignKey(Product, null=True,on_delete=models.CASCADE)
    size_id    = models.ForeignKey(Size, null=True,on_delete=models.CASCADE)
    colour_id  = models.ForeignKey(Colour,null=True,on_delete=models.CASCADE)
    qty        = models.IntegerField()

views.py

@login_required
def add_cart(request):
    if request.method == 'POST':
        p_id = request.POST.get('product_id')
        s_id = request.POST.get('size_name')
        c_id = request.POST.get('col_name')
        qs = Product.objects.get(id=p_id)
        qtty = 0
        print(p_id)
        print(s_id)
        print(c_id)

        object_stock = Stock.objects.filter(product_id=p_id,size_id=s_id,colour_id=c_id, qty__gte=1).values()
        object_stock1 = Stock.objects.get(product_id=p_id,size_id=s_id,colour_id=c_id, qty__gte=1)
        print(object_stock1)
  
        for ob in object_stock:
          qtty +=  ob['qty']
        if qtty >= 1:
            b = cart(qty=1)
            b.stock = object_stock1
            b.user=request.user,
            b.save()            
            return HttpResponse("Inserted")
        else:
            return HttpResponse("Not inserted")

解决方案

错误原因是views.py中b.user=request.user,语句末尾多了一个逗号,这会让赋值结果变成元组((request.user,)),而cart.user需要接收的是User实例而非元组。

移除该逗号即可解决问题,修正后的代码片段:

if qtty >= 1:
    b = cart(qty=1)
    b.stock = object_stock1
    b.user = request.user  # 移除末尾的逗号
    b.save()            
    return HttpResponse("Inserted")

内容的提问来源于stack exchange,提问作者Amit Lalvani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:42:15