注册新用户后,我想将令牌与用户数据一起返回,因此我得到了以下序列化器:
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的新手,所以我不知道自己缺少什么。
[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