未经身份验证的路由 Django 上的 AnonymousUser 错误

AnonymousUser error on unauthenticated route Django

我基本上是一个有限元开发者。最近我正在尝试编辑 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 中没有任何主要 key.Here 是模型中的相关代码(我认为)

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")
 

我从中可以理解的是,在调用交易 api 之后,它会查找用户喜欢的交易以及其他交易。我需要让它看起来像如果有用户它将去搜索已经喜欢的交易+其他交易如果没有那么它只会 return 交易。 我怎样才能实现解决方案?对不起,我在 atm 周围没有任何后端开发人员。

我通过检查序列化程序中的身份验证简单地解决了这个问题。

def get_already_liked(self, obj):
    if self.context["request"].user.is_authenticated:
        return self.context["request"].user.is_liking_deal(deal_obj=obj)