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
свойства.