DJANGO RF -将串行化器嵌套在另一个串行化器中时包含SerializerMethodField

jk9hmnmh  于 2022-12-30  发布在  Go
关注(0)|答案(1)|浏览(161)

我的UserProfile模型上有一个序列化器,它包含一个SerializerMethodField“userGlobalPoints”:

class UserProfileSerializer(serializers.ModelSerializer):
    userGlobalPoints = serializers.SerializerMethodField()

    def get_userGlobalPoints(self, obj):
        (*** calculation ***)
        return userGlobalPoints

    class Meta:
        model = UserProfile
        fields = '__all__'

在我的Post序列化器中,我想为每个帖子嵌套帖子作者的信息,所以我包含了来自UserProfile模型的字段(Post模型中有一个ForeignKey关系)。
我想添加userGlobalPoints字段。但是我不知道如何在序列化程序中嵌套此字段。看起来嵌套序列化程序的常用语法对SerializerMethodField字段不起作用。
这是我的PostSerializer:

class PostSerializer(serializers.ModelSerializer):
    pk = serializers.ReadOnlyField()
    authorNickname = serializers.CharField(source='postAuthor.userNickname', read_only=True)

    authorProfileWithGlobalPoints = UserProfileSerializer(many=False, read_only=True)

    class Meta:
        model = Post
        fields = ['pk','authorNickname','postText', 'postTimestamp', 'authorProfileWithGlobalPoints']

任何帮助如何实现这一点将不胜感激!

EDIT在一个聪明的注解之后,该问题与SerializerMethodField无关。嵌套序列化程序的任何字段都没有序列化!我可能在反向关系方向嵌套序列化程序时犯了错误。

所以这个问题不需要更多的答案。谢谢大家。

EDIT 2错误不是由MethodField引起的。问题是我在序列化器的关系的相反方向嵌套了序列化器。我试图在Post对象中嵌套作者,我更应该在Author对象中嵌套Post。从那时起,我改变了我的逻辑,它工作正常。也许管理员可以删除这个主题,因为它不会给任何人带来太多价值。

jgzswidk

jgzswidk1#

你到底得到了什么样的错误?
有没有可能authorProfileWithGlobalPoints没有在Post模型上定义?也许这可以解决这个问题,告诉Django在模型中要查找什么:

class PostSerializer(serializers.ModelSerializer):
    pk = serializers.ReadOnlyField()

    authorProfileWithGlobalPoints = UserProfileSerializer(source='postAuthor', many=False, read_only=True)

    class Meta:
        model = Post
        fields = ['pk','postText', 'postTimestamp', 'authorProfileWithGlobalPoints']

相关问题