我的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。从那时起,我改变了我的逻辑,它工作正常。也许管理员可以删除这个主题,因为它不会给任何人带来太多价值。
1条答案
按热度按时间jgzswidk1#
你到底得到了什么样的错误?
有没有可能
authorProfileWithGlobalPoints
没有在Post模型上定义?也许这可以解决这个问题,告诉Django在模型中要查找什么: