Добавление поля custom_password в UserSerializer без его регистрации в модели User в Django REST API

Мне нужен способ добавить поле confirm_password в данные, которые возвращает CreateUserView, не создавая его явно в моей модели пользователя. Я попытался сделать следующее, но это вызвало ошибку TypeError at /user/create/ User() got unexpected keyword arguments: 'confirm_password'. Как я могу решить эту проблему?

Спасибо за все ответы

Вот мой код:

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)

Создайте отдельный сериализатор для поля confirm_password (не сериализатор модели). Затем вызовите новый созданный сериализатор в сериализаторе вашего режима для поля confirm_password. В вашем коде поле confirm_password отсутствует в вашей модели пользователя, поэтому вы получаете эту ошибку.

first_name = serializers.CharField()
last_name = serializers.CharField()
username = serializers.CharField()
email = serializers.EmailField()=
password = serializers.CharField()
confirm_password = serializers.CharField()

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields.pop('confirm_password')

def create(self, validated_data):
    user = User.objects.create_user(**validated_data)
    return user

просто введите confirm_password

Вернуться на верх