![](/img/trans.png)
[英]Django Rest Framework: AttributeError: 'NoneType' object has no attribute '_meta' [for OneToOneField]
[英]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.