I need a way to add the confirm_password field in the data my CreateUserView returns without creating it explicitly in my user model. I tried doing the following but it raised TypeError at /user/create/ User() got unexpected keyword arguments: 'confirm_password'
.
How can I solve this issue?
Thank you for all the response
Here is my code:
serializer.py
class CreateUserSerializer(serializers.ModelSerializer):
confirm_password = serializers.CharField(
max_length=100, write_only=True, required=False
)
class Meta:
model = User
fields = [
"id",
"email",
"password",
"confirm_password",
"first_name",
"last_name",
]
extra_kwargs = {"password": {"write_only": True}, "id": {"read_only": True}}
def create(self, validated_data):
return User.objects.create_user(**trim_spaces_from_data(validated_data))
views.py
class CreateUserView(CreateAPIView):
permission_classes = [permissions.AllowAny]
serializer_class = CreateUserSerializer
def create(self, request, *args, **kwargs):
queryset = User.objects.filter(email=request.data["email"])
if queryset.exists():
raise CustomUserException("Provided email address is already in use")
if not "confirm_password" in request.data.keys():
raise CustomUserException("Confirm password field is required")
if not request.data["password"] == request.data["confirm_password"]:
raise CustomUserException("Passwords does not match")
serializer = CreateUserSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(status=200, data=serializer.data)
Create a seperate serializer for the confirm_password field (not a model serialiser). Then call the new made serializer in your mode serializer on the field confirm_password. In youre code the field confirm_password is not in youre user model so you are getting this error.