Django:将我正在序列化的对象嵌套到序列化器中? [英] Django: nest the object I'm serializing into the serializer?

查看:404
本文介绍了Django:将我正在序列化的对象嵌套到序列化器中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我目前的UserSerializer:

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

这是我的PostsSerializer:

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

这是它的序列化方式:

  {name:Bobby Busche,
email:Bobby@gmail.com,
posts:[{from_user:me,message:Hello World},
{from_user :我,消息:再见}],
userna我:ilovemymomma
}

但是我想让用户在这样的关键用户:

  {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中删除帖子字段,以使帖子也不嵌套在那个。


I'm looking to nest the object I'm serializing. Here's what I mean:

My current 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)

Here's my PostsSerializer:

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

Here's what's how it's being serialized:

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

But I want the user to be grouped inside the key "user" like this:

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

}

I need a bit of guidance on what's the best approach to execute for this.

解决方案

You could make a Custom serializer as Rajesh pointed out. Note that this serializer is 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
        }

You would then need to remove the posts field from the UserSerializer so that the posts aren't nested inside that one also.

这篇关于Django:将我正在序列化的对象嵌套到序列化器中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆