如何在 Django 中添加和序列化现有模型的附加字段

How to add and serialise additional fields of an existing model in Django

我在我的 Django 项目中使用 django-rest-frameworkpython-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-authapp的代码来添加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']