Django Rest Framework objects.get выдает, что запрос не существует, но фильтр показывает, что элемент существует

У меня есть модель поста:

class Post(models.Model):

    category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT, default=1)
    body = models.TextField("content", blank=True, null=True, max_length=5000)
    slug = AutoSlugField(populate_from=["category", "created_at"])
    video = models.FileField(upload_to=video_directory_path, null=True, blank=True)
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, verbose_name="user", related_name="user"
    )
    published = models.BooleanField(default=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = "post"
        verbose_name_plural = "posts"
        db_table = "posts"
        ordering = ["created_at"]
        get_latest_by = "created_at"

    def __str__(self):
        return self.body[0:30]

    def get_absolute_url(self):
        return self.slug

    def one_image(self):
        return PostImage.objects.all().filter(post=self)[:1]

и у меня есть эта модель оценки сообщения, чтобы кто-то мог оценить сообщение:

class PostRating(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    score = models.IntegerField(choices=list(zip(range(1, 6), range(1, 6))))
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, verbose_name="user that gave rating"
    )
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="created at")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="updated at")

    class Meta:
        verbose_name = "rating"
        verbose_name_plural = "ratings"
        db_table = "post_ratings"

    def __str__(self):
        return str(self.score)

Я пытаюсь получить рейтинг поста вместе с постом в конечной точке. Вот сериализаторы, которые я использую для достижения этой цели:

class UserPostSerializer(serializers.ModelSerializer):
    images = PostImageSerializer(many=True, read_only=True, required=False)
    profile = serializers.SerializerMethodField()
    bookmarked = serializers.SerializerMethodField()
    rating = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = [
            "id",
            "category",
            "body",
            "images",
            "video",
            "profile",
            "published",
            "bookmarked",
            "rating",
            "created_at",
            "updated_at",
        ]
        depth=1
        
    def get_profile(self, obj):
        profile_obj = Profile.objects.get(id=obj.user.profile.id)
        profile = ShortProfileSerializer(profile_obj)
        return profile.data

    def get_bookmarked(self, obj):
        loggeduser = self.context.get('view').kwargs.get('user')
        bookmark = Bookmark.objects.filter(owner=loggeduser, post=obj.id, marktype='post')
        if bookmark:
            return True
        else:
            return False

    def get_rating(self, obj):
        rating_obj = PostRating.objects.filter(post=obj.id)
        if rating_obj:
            rating = PostRatingSerializer(rating_obj)
            return rating.data

class PostRatingSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostRating
        fields = [
            "post",
            "score",
            "user",
        ]

В функции get_rating если я сделаю точку останова после:

rating_obj = PostRating.objects.filter(post=obj.id)

тогда я вижу объект, но получаю ошибку в браузере:

Got AttributeError when attempting to get a value for field `post` on serializer `PostRatingSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: 'QuerySet' object has no attribute 'post'.

Если я меняю фильтр на get, то получаю ошибку в браузере:

PostRating matching query does not exist.

Почему get говорит мне, что объект не существует, когда filter ясно показывает, что он существует. Во-вторых, почему я получаю ошибку о неправильном сериализаторе, если я использую filter. Я использую filter в том случае, если у поста еще нет рейтинга.

Что я делаю неправильно и как я могу получить рейтинг сообщения в сериализаторе сообщений?

Вернуться на верх