【问题标题】:Django: nest the object I'm serializing into the serializer?Django:将我正在序列化的对象嵌套到序列化程序中?
【发布时间】:2017-06-28 07:21:27
【问题描述】:

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

我当前的 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": { "name": "Bobby Busche", 
             "email": "Bobby@gmail.com",
             "username": "ilovemymomma" }
  "posts": [ {"from_user": "me", "message": "Hello World"},
             {"from_user": "me", "message": "Bye bye"} ]

}

我需要一些指导来了解执行此操作的最佳方法。

【问题讨论】:

  • 自定义序列化程序是一种方法!又快又干净。

标签: django django-rest-framework django-serializer


【解决方案1】:

您可以像 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 中删除帖子字段,以便帖子也不会嵌套在该字段中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多