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

How to serialize the return value of a method in a model?

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

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

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 模型中方法调用的结果。我该怎么做?

我找到了使用 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')