【问题标题】:Django: adding two serializers together?Django:将两个序列化程序一起添加?
【发布时间】:2017-02-10 07:42:09
【问题描述】:

如何在另一个序列化程序中添加一个序列化程序?这就是我的意思:

我有一个这样的 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 字段。它只显示序列化的用户分析器,完全忽略帖子。

【问题讨论】:

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


    【解决方案1】:

    尝试使用SerializerMethodField 从PostsSerializer 获取帖子,然后手动将它们添加到您的UserProfileSerializer 输出的“帖子”字段中,例如

    class UserProfileSerializer
        ...
        posts = serializers.SerializerMethodField()
    
        class Meta:
            fields = ("posts", ... other fields, ...}
    
        def get_posts(self, user):
            posts = Posts.objects.get_posts_from_user(user)
            return PostsSerializer(posts, many=True, context=self.context).data
    

    【讨论】:

    • 我是否只是从我的观点中调用get_posts?
    • 不,您只需序列化您的用户,它会自动附加帖子
    • 你介意帮我解决这个问题吗?它与这个问题有关。 stackoverflow.com/questions/42150996/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    相关资源
    最近更新 更多