“尝试在序列化器 `UserSerializer` 上获取字段 `username` 的值时出现 KeyError

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

尝试获取当前用户,但显示用户名密钥错误,但从我这边来看一切都很好。谁能告诉我错误是什么?

观点:

@api_view(['POST'])
def register(request):
data = request.data

user = SignUpSerializer(data=data)
if user.is_valid():

    if not User.objects.filter(username = data['email']).exists():

        user = User.objects.create(
            first_name = data['first_name'],
            last_name = data['last_name'],
            username = data['email'],
            email = data['email'],
            password = make_password(data['password'])
        )
        return Response({
            'details':'Sucessfully registered.'
        }, status.HTTP_201_CREATED)
    else:
        return Response({
            'error':'User already exists.'
        }, status.HTTP_400_BAD_REQUEST)
else:
    return Response(user.errors)

这是 UserSerializer 视图。

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def current_user(request):
    user = UserSerializer(request.data)
    print(user)
    return Response(user.data)

序列化器.py:

class SignUpSerializer(serializers.ModelSerializer):

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

    extra_kwargs = {
        'first_name':{'required':True, 'allow_blank':False},
        'last_name':{'required':True, 'allow_blank':False},
        'email':{'required':True, 'allow_blank':False},
        'password':{'required':True, 'allow_blank':False, 'min_length':4}
    }

这是用户序列化器

class UserSerializer(serializers.ModelSerializer):

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

django django-rest-framework django-serializer
1个回答
0
投票

用这个代替。将 request.data 替换为 request.user

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def current_user(request):
user = UserSerializer(request.user)
print(user)
return Response(user.data)
© www.soinside.com 2019 - 2024. All rights reserved.