如何在 Django ORM 中使某些字段可选
How to make some fields optional in Django ORM
我编写了一个注册用户的函数。在我的消毒器中,名称字段是可选的,但每当我尝试在不提供名称的情况下创建用户时,我只会面临 KeyError: 'name'
。
我应该怎么做才能使此代码正常工作?
def post(self, request):
if request.user.is_anonymous:
data = RegisterationSerializer(data=request.data)
if data.is_valid():
User.objects.create_user(email=data.validated_data['email'], username=data.validated_data['username'],
password=data.validated_data['password'], name=data.validated_data['name'])
return Response({
"message": f'{data.validated_data["email"]} account was created successfully'
}, status=status.HTTP_201_CREATED)
else:
return Response(data.errors, status=status.HTTP_400_BAD_REQUEST)
else:
return Response({
"message": "You already authorized"
}, status=status.HTTP_400_BAD_REQUEST)
问题是您正在尝试访问 validated_data 中的 name
。但是没有名字。
你可以做类似 User.objects.create_user(**data.validated_data)
或者你可以做
User.objects.create_user(
email=data.validated_data['email'],
username=data.validated_data['username'],
password=data.validated_data['password'],
name=data.validated_data['name'] if 'name' in data.validated_data else '') # or None
我编写了一个注册用户的函数。在我的消毒器中,名称字段是可选的,但每当我尝试在不提供名称的情况下创建用户时,我只会面临 KeyError: 'name'
。
我应该怎么做才能使此代码正常工作?
def post(self, request):
if request.user.is_anonymous:
data = RegisterationSerializer(data=request.data)
if data.is_valid():
User.objects.create_user(email=data.validated_data['email'], username=data.validated_data['username'],
password=data.validated_data['password'], name=data.validated_data['name'])
return Response({
"message": f'{data.validated_data["email"]} account was created successfully'
}, status=status.HTTP_201_CREATED)
else:
return Response(data.errors, status=status.HTTP_400_BAD_REQUEST)
else:
return Response({
"message": "You already authorized"
}, status=status.HTTP_400_BAD_REQUEST)
问题是您正在尝试访问 validated_data 中的 name
。但是没有名字。
你可以做类似 User.objects.create_user(**data.validated_data)
或者你可以做
User.objects.create_user(
email=data.validated_data['email'],
username=data.validated_data['username'],
password=data.validated_data['password'],
name=data.validated_data['name'] if 'name' in data.validated_data else '') # or None