Python Django Rest框架,获取错误:';非类型';对象没有属性

Python Django Rest框架,获取错误:';非类型';对象没有属性,python,django,django-rest-framework,Python,Django,Django Rest Framework,我创建了一个博客,人们可以在这里发表文章、评论和喜欢发表文章。当我发布新帖子时,我在/api/posts/'NoneType'对象上获得错误AttributeError,该对象没有属性'user',在get_user_has_vote,第20行的serializers.py处发生错误 即使我得到了错误,我能够发布数据和所有其他功能正常工作 为什么会发生错误?如何调试它 序列化程序.PY class PostSerializers(serializers.ModelSerializer):

我创建了一个博客,人们可以在这里发表文章、评论和喜欢发表文章。当我发布新帖子时,我在/api/posts/'NoneType'对象上获得错误AttributeError,该对象没有属性'user',在get_user_has_vote,第20行的serializers.py处发生错误

即使我得到了错误,我能够发布数据和所有其他功能正常工作

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

序列化程序.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

MODELS.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中。

因为
上下文
没有
请求
。您可以使用pdb或pudb对其进行调试
pip安装pudb
然后将这一行放在需要中断的任何位置:
import pudb;pudb.set_trace()
@WillemVanOnsem我能忽略这个错误吗?@RossRogers谢谢我会尝试回答你的Marker先生,我用我的视图添加了代码。py你为什么不推荐它?因为你是根据授权用户获得选民的。这是一个很好的业务逻辑或验证(我看不出它在哪里使用)。最佳实践是将业务逻辑排除在services.py中。