当我尝试将产品添加到愿望清单时,它给出了上述错误,它仍然将对象保存到模型中
def plus_wishlist(reques):
if request.method == "GET":
prod_id = request.GET.get('prod_id')
product = Product.objects.get(id=prod_id)
ruser = request.user
wishlist = Wishlist.objects.create(user=ruser, product=product)
wishlist.save()
return JsonResponse({'message': 'Added to Wishlist.'})
当我尝试使用时
ruser=request.user.id
ValueError:无法分配“1”:“Wishlist.user”必须是“User”实例。
class Wishlist(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE)
product=models.ForeignKey(Product,on_delete=models.CASCADE)
@login_required
装饰器将视图限制为经过身份验证的用户的视图[Django-doc]:
from django.contrib.auth.decorators import login_required
@login_required
def plus_wishlist(reques):
if request.method == 'GET':
prod_id = request.GET.get('prod_id')
product = Product.objects.get(id=prod_id)
ruser = request.user
wishlist = Wishlist.objects.create(user=ruser, product=product)
wishlist.save()
return JsonResponse({'message': 'Added to Wishlist.'})
我们还可以通过以下方式提高效率:
from django.contrib.auth.decorators import login_required
@login_required
def plus_wishlist(reques):
if request.method == 'GET':
prod_id = request.GET.get('prod_id')
wishlist = Wishlist.objects.create(user=request.user, product_id=prod_id)
return JsonResponse({'message': 'Added to Wishlist.'})
话虽如此,您可以不使用
GET请求将项目添加到
Wishlist
:GET 请求应该没有副作用。因此,应通过 POST 请求向 Wishlist
添加某些内容。
如果用户未经过身份验证,那么当您使用
Anonymous
获取 user
时,Django 将返回 request.user
用户。该实例没有 id
属性。您应该确保用户在创建产品之前经过身份验证。现在,出现以下问题:It still saves the object to model
,我认为您的 Wishlist
模型允许为 user
属性设置空值。