Как вложить поля модели под другой ключ для сериализатора

У меня есть такой тип модели Post

class Post(models.model):
    id = models.UUIDField(primary_key=True, default=uuid4)
    user = models.ForeignKey(UserProfile, null=True, on_delete=models.CASCADE)
    tags = models.ManyToManyField("Tags", blank=True, related_name="posts")
    title = models.CharField(max_length=200)
    body = RichTextField(blank=True, null=True)
    post_views = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True, verbose_name=("created_at"))

in the serializer, I want to nest title, body, created_at under another key named article

serializers.py

class ArticleSerializer(serializers.ModelSerializer):
    title = serializers.CharField()
    content = serializers.CharField(source="body")
    created_at = serializers.CharField()

    class Meta:
        model = Post
        fields = ("title", "body", "created_at")

class PostSerializer(serializers.ModelSerializer):
    user = serializers.SlugRelatedField(slug_field="email", read_only=True)
    article = ArticleSerializer(required=True)
    tags = TagSerializer(many=True, required=False)
    post_views = serializers.IntegerField(read_only=True)

    def to_representation(self, instance):
        data = super().to_representation(instance)
        cat = data.pop("category")
        title = data.pop("title")
        content = data.pop("body")
        created_at = data.pop("created_at")
        data["categories"] = cat
        data["article"] = {"title": title, "content": content, "created_at": created_at}
        return data

    class Meta:
        model = Post
        fields = "__all__"

views.py

class ArticleView(APIView):
     def get_object(self, pk: int):
        try:
            if pk:
                return Post.objects.filter(pk=pk, draft=False)
            return Post.objects.filter(draft=False) 
        except Post.DoesNotExist:
            raise Http404

    def get(self, request: Request, pk=None):
        post = self.get_object(pk)
        serializer = PostSerializer(post, many=True)
        return Response(serializer.data)

Ошибка, которую я получаю

AttributeError: Got AttributeError when attempting to get a value for field `article` on
                    serializer `PostSerializer`.
                    The serializer field might be named incorrectly and not match any attribute or key on the
                    `Post` instance.
                    Original exception text was: 'Post' object has no attribute 'article'
fields = ["article","modelfield", etc etc]

в постсериализаторе вместо всех вызывать поля

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