Django Rest Framework, появляется ошибка: объект 'NoneType' не имеет атрибута - PullRequest
0 голосов
/ 06 мая 2020

Я создал блог, в котором люди могут публиковать сообщения, комментировать и лайкать публикации. Когда я отправляю новые сообщения, я получаю ошибку AttributeError в / api / posts / Объект «NoneType» не имеет атрибута «user», ошибка возникает в serializers.py в get_user_has_voted , строка 20.

даже если я получаю сообщение об ошибке, я могу отправить данные POST, и все остальные функции работают нормально.

Почему возникает ошибка? Как я могу отладить его?

SERIALIZER.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)

В переполнении стека есть повторяющиеся вопросы, но с другим сценарием ios , как новичок, я не мог понять asp идею.

1 Ответ

1 голос
/ 06 мая 2020

Вам необходимо передать ваш запрос сериализатору через контекст.

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

В любом случае я настоятельно НЕ РЕКОМЕНДУЮ делать это. Сериализаторы предназначены для сериализации данных, а не для вашей бизнес-логики c или проверки.

Рассмотрите возможность исключения его из services.py, если он является частью вашей бизнес-логики c.

...