类型错误:字段“id”需要一个数字,但得到了<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000001C1939EBE90>>

问题描述 投票:0回答:2

当我尝试将产品添加到愿望清单时,它给出了上述错误,它仍然将对象保存到模型中

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)
django django-models django-views django-forms django-templates
2个回答
0
投票

使用

@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
添加某些内容。


0
投票

如果用户未经过身份验证,那么当您使用

Anonymous
获取
user
时,Django 将返回
request.user
用户。该实例没有
id
属性。您应该确保用户在创建产品之前经过身份验证。现在,出现以下问题:
It still saves the object to model
,我认为您的
Wishlist
模型允许为
user
属性设置空值。

© www.soinside.com 2019 - 2024. All rights reserved.