Django:嵌套对象I';我正在序列化到序列化程序中?

Django:嵌套对象I';我正在序列化到序列化程序中?,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我希望嵌套我正在序列化的对象。我的意思是: 我当前的用户序列化程序: class UserSerializer(serializers.ModelSerializer): posts = serializers.SerializerMethodField() class Meta: model = User fields = ('__all__') def get_posts(self, user): posts = Pos

我希望嵌套我正在序列化的对象。我的意思是:

我当前的用户序列化程序:

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)
class PostsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Posts
        fields = ('__all__')
这是我的PostsSerializer:

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)
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所指出的,您可以创建一个自定义序列化程序。请注意,此序列化程序是只读的

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中删除posts字段,以便posts不会嵌套在该字段中。

您可以像Rajesh指出的那样创建自定义序列化程序。请注意,此序列化程序是只读的

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中删除posts字段,这样posts就不会嵌套在该字段中。

自定义序列化程序就是一种方法!快速和干净。自定义序列化程序是一种方式!又快又干净。