繁体   English   中英

Django Rest 框架,出现错误:'NoneType' object 没有属性

[英]Django Rest Framework, getting error : 'NoneType' object has no attribute

我创建了一个博客,人们可以在其中发布、评论和喜欢发布。 当我发布新帖子时,我在 /api/posts/ 'NoneType' object has no attribute 'user' 处收到错误 AttributeError,错误发生在 serializers.py 中的get_user_has_voted ,第 20 行。

即使我收到错误,我也可以发布数据并且所有其他功能都可以正常工作。

为什么会发生错误? 我该如何调试它?

序列化器.PY

class PostSerializers(serializers.ModelSerializer):
    comments = serializers.HyperlinkedRelatedField(many=True,read_only=True,view_name = 'comment_details')
    likes_count = serializers.SerializerMethodField()
    user_has_voted = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = '__all__'
        #exclude=('voters',)

    def get_likes_count(self, instance):
        return instance.voters.count()

    def get_user_has_voted(self, instance):
        request = self.context.get("request")
        return instance.voters.filter(pk=request.user.pk).exists()  # line 20

模型.PY

class Post(models.Model):
    title = models.CharField(max_length=60)
    body = models.CharField(max_length=60)
    file = models.FileField(null=True,blank=True)
    voters = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                    related_name="votes",null=True,blank=True)

堆栈溢出中有重复的问题,但场景不同,作为初学者,我无法理解这个想法。

您需要通过上下文将您的请求传递给序列化程序。

serializer = PostSerializers(instance, context={'request': request})

无论如何,我强烈不建议这样做。 序列化器用于序列化数据,而不是用于您的业务逻辑或验证。

如果它是您业务逻辑的一部分,请考虑将其排除在 services.py 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM