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