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

man*_*eak 4 python django django-rest-framework django-allauth

我有一个使用 Django REST Framework 和 Django-allauth 的 Django 应用程序。现在,我正在尝试检索社交帐户中存在的头像 URL。但是,我在形成序列化器时遇到问题。

对于背景信息,allauthsSocialAccount通过外键与用户模型相关:

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


    # the method I'm interested of
    def get_avatar_url(self):
        ...
Run Code Online (Sandbox Code Playgroud)

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

class ProfileInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name')
Run Code Online (Sandbox Code Playgroud)

最后,我想要一个额外的字段来avatar_url获取模型中方法调用的结果SocialAccount。我怎么做?

man*_*eak 5

我找到了一个使用以下解决方案的解决方案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')
Run Code Online (Sandbox Code Playgroud)