urls template examples bootstrap django django-rest-framework django-serializer

template - django urls



Django: anida el objeto que estoy serializando en el serializador? (1)

Estoy buscando anidar el objeto que estoy serializando. Esto es lo que quiero decir:

Mi actual 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)

Aquí está mi Publicador de publicaciones:

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

Así es cómo se serializa:

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

Pero quiero que el usuario se agrupe dentro de la clave "usuario" de esta manera:

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

Necesito un poco de orientación sobre cuál es el mejor enfoque para ejecutar para esto.


Podría hacer un serializador personalizado como Rajesh señaló. Tenga en cuenta que este serializador es de solo lectura.

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 }

Debería eliminar el campo de publicaciones del UserSerializer para que las publicaciones no estén anidadas dentro de ese también.