Ошибка AnonymousUser на неаутентифицированном маршруте Django
Я в основном FE разработчик. Недавно я пытался отредактировать проект Django и удалить аутентификацию из api. После удаления аутентификации и попытки получить данные без токена он выдает анонимную ошибку. Работает хорошо для действительного пользователя
django_1 | return method(value)
django_1 | File "/app/deals/serializers.py", line 285, in get_already_liked
django_1 | return usr.is_liking_deal(deal_obj=obj)
django_1 | AttributeError: 'AnonymousUser' object has no attribute 'is_liking_deal'
Вот конкретный код в сериализаторах
def get_already_liked(self, obj):
usr = self.context["request"].user
return usr.is_liking_deal(deal_obj=obj)
<<<Поскольку я не отправляю пользователя через аутентификацию, Django принимает его как AnonymousUser, а в модели AnonymousUser нет первичного ключа. Вот связанный код из модели (я думаю)
class DealReactionManager(models.Manager):
@staticmethod
def is_user_liking_deal(user, deal):
"""Has user liked the deal already?"""
try:
DealReaction.objects.get(user=user, deal=deal)
return True
except DealReaction.DoesNotExist:
return False
class DealReaction(BaseModel):
deal = models.ForeignKey(to="deals.Deal", related_name="reactions", on_delete=models.CASCADE)
user = models.ForeignKey(to=get_user_model(), related_name="reactions", on_delete=models.CASCADE)
objects = DealReactionManager()
class Meta:
unique_together = ("deal", "user")
Как я понял из этого, после вызова deals api он ищет понравившиеся пользователю предложения, а также другие предложения. Мне нужно сделать так, чтобы если есть пользователь, то он искал уже понравившиеся сделки+другие сделки, если нет, то возвращал только сделки. Как я могу добиться такого решения? Извините, у меня сейчас нет рядом бэкенд разработчика.
Я решил эту проблему, просто проверив аутентификацию в моем сериализаторе.
def get_already_liked(self, obj):
if self.context["request"].user.is_authenticated:
return self.context["request"].user.is_liking_deal(deal_obj=obj)