Как можно добавить сериализатор в другой сериализатор? Вот что я имею в виду:Django: добавление двух сериализаторов вместе?
У меня есть модель UserProfile как таковой:
class UserProfile(models.Model):
user = models.OneToOneField(User)
photo = models.URLField(max_length=128)
У меня есть сообщения, которые от пользователя:
class Posts(models.Model):
# ... post fields
Я хочу сериализации мой UserProfile с пользователем и фото, а также сообщения от этого пользователя. Вот результат я и добиваюсь:
{ "user": <User fields serialized>,
"photo": "www.example.com/path/to/file",
"posts": "[{"from_user": "me", "message": "post message} ,
{"from_user": "me", "message": "post message2"}, ... etc],"
}
В моем views.py я первый собирать сообщения, которые приходят от этого пользователя:
user = User.objects.get(pk=1)
user_profile = UserProfile.objects.get(user=user)
user_profile_serializer = UserProfileSerializer(user_profile)
posts = Posts.objects.get_posts_from_user(user)
post_serializer = PostsSerializer(posts, many=True)
# somehow append my post_serializer into my user_profile_serializer?
Вот мой PostsSerializer.py:
class PostsSerializer(serializers.ModelSerializer):
class Meta:
model = Posts
fields = ('__all__')
Вот мой UserSerializer.py:
class UserProfileSerializer(serializers.ModelSerializer):
# somehow filter the results depending on User
posts_serializer = PostsSerializer(many=True)
class Meta:
model = UserProfile
fields = ('__all__')
Я пробовал сериализацию профиля пользователя, и поскольку я добавил переменную сериализатора внутри своего UserProfileSerializer
, я предположил, что он автоматически добавит поле posts
. Он просто показывает селектор User Profiler, игнорируя сообщения вообще.
Я просто назову 'get_posts' из своих представлений? –
Нет, вы просто сериализуете своего пользователя, и он будет добавлять сообщения автоматически –
, не могли бы вы помочь мне решить этот вопрос, пожалуйста? Это связано с этим вопросом. http://stackoverflow.com/questions/42150996/django-nest-the-object-im-serializing-into-the-serializer –