Django:将我正在序列化的对象嵌套到序列化程序中?

Django: nest the object I'm serializing into the serializer?

我想要嵌套我正在序列化的对象。这就是我的意思:

我当前的 UserSerializer:

class UserSerializer(serializers.ModelSerializer):
    posts = serializers.SerializerMethodField()
    class Meta:
        model = User
        fields = ('__all__')
    def get_posts(self, user):
        posts = Posts.objects.get_posts_for_user(user=user)
        return PostsSerializer(posts, many=True, context=self.context)

这是我的 PostsSerializer:

class PostsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Posts
        fields = ('__all__')

序列化的方式如下:

{ "name": "Bobby Busche", 
  "email": "Bobby@gmail.com",
  "posts": [ {"from_user": "me", "message": "Hello World"},
             {"from_user": "me", "message": "Bye bye"} ],
  "username": "ilovemymomma"
}

但我希望用户像这样在键 "user" 内分组:

{ "user": { "name": "Bobby Busche", 
             "email": "Bobby@gmail.com",
             "username": "ilovemymomma" }
  "posts": [ {"from_user": "me", "message": "Hello World"},
             {"from_user": "me", "message": "Bye bye"} ]

}

我需要一些关于执行此操作的最佳方法的指导。

您可以像 Rajesh 指出的那样制作自定义序列化程序。请注意,此序列化程序是 read-only.

class UserPostsSerializer(serializers.BaseSerializer):

    def to_representation(self, instance):
        posts = Posts.objects.get_posts_for_user(user=instance)
        return {
            'user': UserSerializer(instance).data,
            'posts': PostSerialzer(posts, many=True).data
        }

然后您需要从 UserSerializer 中删除帖子字段,这样帖子也不会嵌套在该字段中。