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

