繁体   English   中英

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

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

我在Django项目中使用django-rest-frameworkpython-social-auth

这是我项目中UserSocialAuth模型的序列化器类

class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.CharField()

    class Meta:
        model = UserSocialAuth
        fields = ('id', 'provider')

然后我要在序列化器上方添加一个字段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应用程序的代码以添加def login: UserSocialAuth所以如何在不触摸用户名的情况下将其他字段添加到现有模型UserSocialAuthpython-social-auth代码。

我只是发现我可以在此处使用SerializerMethodField ,而无需更改原始类UserSocialAuth ,只需向序列化器添加一个字段,如下所示:

class SocialAuthSerializer(serializers.HyperlinkedModelSerializer):
    login = serializers.SerializerMethodField()

    def get_login(self, obj):
        return obj.extra_data['login']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM