Фильтр вложенного поля модели сериализатора (исключение конкретного поля)

Я новичок в Django и пытаюсь exclude поле модели во вложенном сериализаторе.

modals.py

class Blog(models.Model):
    title = models.CharField(max_length=30)
    description = models.CharField(max_length=30)

class Comment(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE, related_name="comment")
    comment_bdy = models.CharField(max_length=30)
    completed = models.BooleanField(default=False)

serializers.py

class BlogCommentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Comment
        fields = ("id", "comment_body")

class BlogSerializer(serializers.ModelSerializer):
    comment = BlogCommentSerializer(many=True)
    
    class Meta:
        model = ("id", "title", "description", "comment",)

Я пытаюсь исключить comment, которые имеют completed=True .

Я пробовал много раз, как :-

class BlogCommentSerializer(serializers.ModelSerializer):

    def to_representation(self, data):
        data = data.filter(completed=False)
        return super(BlogCommentSerializer, self).to_representation(data)

Но он показывает:

AttributeError: объект 'CommentReply' не имеет атрибута 'filter'

Затем я попробовал использовать:

class BlogSerializer(serializers.ModelSerializer):

    def get_comment(self, instance):
        comment_instance = instance.comment_set.exclude(completed=True)
        return BlogSerializer(comment_instance , many=True).data

Это также не сработало.

Что я пытаюсь сделать

Я пытаюсь исключить комментарии, которые являются completed=True

Вы можете попробовать следующим образом, используя SerializerMethodField:

class BlogSerializer(serializers.ModelSerializer):
    comment = serializers.SerializerMethodField()

    def get_comment(self, instance):
        comment_instances = instance.comment.exclude(completed=True)
        return BlogCommentSerializer(comment_instances , many=True).data

Попробуйте:

class BlogSerializer(serializers.ModelSerializer):
    comment = serializers.SerializerMethodField()

    def get_comment(self, obj):
        queryset = Comment.objects.
            filter(blog=obj).exclude(blog__completed=True)
        return [BlogCommentSerializer(q).data for q in queryset]
Вернуться на верх