编程语言
首页 > 编程语言> > python-在Django Rest框架中加入相关模型

python-在Django Rest框架中加入相关模型

作者:互联网

尝试创建用于获取用户个人资料的API方法.问题在于,有两个与用户相关的表:django中内置的User和allauth框架中的SocialAccount.我想连接部分应该在序列化器中,所以在研究之后我想到了:

from rest_framework import serializers
from django.contrib.auth.models import User
from allauth.socialaccount.models import SocialAccount


class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('pk', 'first_name', 'last_name')


class SocialSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=False, read_only=True)

    class Meta:
        model = SocialAccount
        fields = ('uid', 'provider', 'user')

它可以工作,但是将其输出为嵌套对象:

{
  "uid": "",
  "provider": "",
  "user": {
    "pk": 5,
    "first_name": "",
    "last_name": ""
  }
}

我希望将其作为一个对象:

{
  "uid": "",
  "provider": "",
  "pk": 5,
  "first_name": "",
  "last_name": ""
}

解决方法:

或者,尝试

class SocialSerializer(serializers.ModelSerializer):
    user = UserSerializer()

    class Meta:
        model = SocialAccount
        fields = ('uid', 'provider', 'user')

    def to_representation(self, instance):
        data = super(SocialSerializer, self).to_representation(instance)
        user = data.pop('user')
        for key, val in user.items():
            data.update({key: val})
        return data

标签:django-allauth,django-rest-framework,python,django
来源: https://codeday.me/bug/20191025/1928122.html