Django Rest Framework AttributeError:'Response'对象没有属性'pk'

问题描述 投票:0回答:1

注册新用户后,我想将令牌与用户数据一起返回,因此我得到了以下序列化器:

class UserSerializer(serializers.HyperlinkedModelSerializer):

    profile = UserProfileSerializer(required=True)

    class Meta:
        model = User
        fields = ('url', 
                  'email', 
                  'first_name', 
                  'last_name',
                  'password',
                  'profile')
        extra_kwargs = {'password': {'write_only': True}}

    def create_token(self, user):
        token, created = Token.objects.get_or_create(user=user)
        return token

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')

        password = validated_data.pop('password')

        user = User(**validated_data)
        user.set_password(password)
        user.save()

        token = self.create_token(user)

        UserProfile.objects.create(user=user, **profile_data)

        resp = {
            'token': token.key,
            'user': user,
        }

        return Response(data=resp, status=status.HTTP_200_OK) 

但是它不起作用。我收到以下错误:

AttributeError:“响应”对象没有属性“ pk”

我是DRF的新手,所以我不知道自己缺少什么。

python django django-rest-framework django-rest-auth
1个回答
0
投票

[create(...)方法(和update()方法)应该返回创建的(或更新的)模型实例,而不是Response(...)对象] >

class UserSerializer(serializers.HyperlinkedModelSerializer):
    profile = UserProfileSerializer(required=True)

    class Meta:
        model = User
        fields = ('url',
                  'email',
                  'first_name',
                  'last_name',
                  'password',
                  'profile')
        extra_kwargs = {'password': {'write_only': True}}

    def create_token(self, user):
        token, created = Token.objects.get_or_create(user=user)
        return token

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')

        password = validated_data.pop('password')

        user = User(**validated_data)
        user.set_password(password)
        user.save()

        token = self.create_token(user)

        UserProfile.objects.create(user=user, **profile_data)

        return user
© www.soinside.com 2019 - 2024. All rights reserved.