如何序列化模型中方法的 return 值?
How to serialize the return value of a method in a model?
我有一个使用 Django REST Framework 和 Django-allauth 的 Django 应用程序。现在,我正在尝试检索社交帐户中存在的头像 URL。但是,我在构建序列化器时遇到了问题。
关于背景信息,allauth
的 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
模型中方法调用的结果。我该怎么做?
我找到了使用 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')
我有一个使用 Django REST Framework 和 Django-allauth 的 Django 应用程序。现在,我正在尝试检索社交帐户中存在的头像 URL。但是,我在构建序列化器时遇到了问题。
关于背景信息,allauth
的 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
模型中方法调用的结果。我该怎么做?
我找到了使用 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')