如何在 Django 中添加和序列化现有模型的附加字段
How to add and serialise additional fields of an existing model in Django
我在我的 Django 项目中使用 django-rest-framework
和 python-social-auth
。
这是我项目中UserSocialAuth
模型的序列化器class
class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.CharField()
class Meta:
model = UserSocialAuth
fields = ('id', 'provider')
然后我想在Serializer上面加一个字段UserSocialAuth.extra_data['login']
,传统的方式应该是
class UserSocialAuth(AbstractUserSocialAuth):
def login:
return self.extra_data['login']
class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
login = serializers.CharField(source='login')
...
fields = ('id', 'provider', 'login')
问题是UserSocialAuth
是属于python-social-auth
的,我得直接改python-social-auth
app的代码来添加def login:
,怎么添加现有模型 UserSocialAuth
的附加字段,无需触及 python-social-auth
.
的代码
我只是发现我可以在这里使用SerializerMethodField
,不需要改变原始的class UserSocialAuth
,只需像这样向序列化器添加一个字段:
class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
login = serializers.SerializerMethodField()
def get_login(self, obj):
return obj.extra_data['login']
我在我的 Django 项目中使用 django-rest-framework
和 python-social-auth
。
这是我项目中UserSocialAuth
模型的序列化器class
class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.CharField()
class Meta:
model = UserSocialAuth
fields = ('id', 'provider')
然后我想在Serializer上面加一个字段UserSocialAuth.extra_data['login']
,传统的方式应该是
class UserSocialAuth(AbstractUserSocialAuth):
def login:
return self.extra_data['login']
class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
login = serializers.CharField(source='login')
...
fields = ('id', 'provider', 'login')
问题是UserSocialAuth
是属于python-social-auth
的,我得直接改python-social-auth
app的代码来添加def login:
,怎么添加现有模型 UserSocialAuth
的附加字段,无需触及 python-social-auth
.
我只是发现我可以在这里使用SerializerMethodField
,不需要改变原始的class UserSocialAuth
,只需像这样向序列化器添加一个字段:
class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
login = serializers.SerializerMethodField()
def get_login(self, obj):
return obj.extra_data['login']