如何序列化模型中方法的返回值?

时间:2015-09-02 13:37:46

标签: python django django-rest-framework django-allauth

我有一个使用Django REST Framework和Django-allauth的Django应用程序。现在,我试图检索社交帐户中存在的头像网址。但是,我在编写串行器时遇到了麻烦。

有关背景信息,allauth' s SocialAccount通过外键与用户模型相关:

class SocialAccount(models.Model):
    user = models.ForeignKey(allauth.app_settings.USER_MODEL)


    # the method I'm interested of
    def get_avatar_url(self):
        ...

现在,这是我目前拥有的序列化程序:

class ProfileInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name')

最后,我希望有一个额外的字段avatar_url,它会在SocialAccount模型中获取方法调用的结果。我该怎么做?

1 个答案:

答案 0 :(得分:3)

我找到了使用SerializerMethodField的解决方案:

class ProfileInfoSerializer(serializers.ModelSerializer):
    avatar_url = serializers.SerializerMethodField()

    def get_avatar_url(obj, self):
        return obj.socialaccount_set.first().get_avatar_id()

    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'avatar_url')