如何在 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