TypeError: Поле 'id' ожидало число, но получило <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000001C1939EBE90>>.

Когда я пытаюсь добавить товар в список желаний, он выдает мне вышеуказанную ошибку, он по-прежнему сохраняет объект в модели

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

Ошибка значения: Невозможно присвоить значение "1": "Wishlist.user" должен быть экземпляром "User".

Ограничьте просмотр представления для аутентифицированных пользователей с помощью декоратора @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.'})

При этом вы можете не добавить элемент в Wishlist с помощью GET запроса: GET-запросы не должны иметь побочных эффектов. Таким образом, добавление чего-либо в Wishlist должно осуществляться с помощью POST-запроса.

Если пользователь не аутентифицирован, то Django вернет Anonymous пользователя, когда вы получили user с помощью request.user. У этого экземпляра нет атрибута id. Вы должны быть уверены, что пользователь аутентифицирован перед созданием товаров. Теперь следующая проблема: It still saves the object to model, я думаю, что ваша Wishlist модель позволяет установить нулевое значение для user свойства.

Вернуться на верх