Неожиданное поле пароля в django rest framework

Я создаю систему регистрации с помощью REST-фреймворка django, чтобы использовать ее с React js. Вот мой сериализатор:

from rest_framework import serializers 
from backApp.models import Client 

class RegistrationSerializer(serializers.ModelSerializer):

    password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
    
    class Meta:

        model = Client 
        fields = ['username', 'email', 'password', 'password2']

        extra_kwargs = {

            'password': {'write_only': True}
        }

        def save(self):

            client = Client(

                email = self.validated_data['email'], 
                username = self.validated_data['username'],
            )

            password = self.validated_data['password']
            password2 = self.validated_data['password2']

            if password != password2:

                raise serializers.ValidationError({'password': 'Passwords must match'})

            client.set_password(password)
            client.save()

            return client

и вот мой файл views.py:

from rest_framework import status 
from rest_framework.response import Response 
from rest_framework.decorators import api_view, permission_classes
from rest_framework import permissions
from authentication.api.serializers import RegistrationSerializer

@api_view(['POST',])
@permission_classes((permissions.AllowAny,))
def registration_view(request):

    if request.method == "POST":

        serializer = RegistrationSerializer(data=request.data)
        data = {}
        
        if serializer.is_valid():

            client = serializer.save()
            data['response'] = "successfully registred!"
            data['email'] = client.email
            data['username'] = client.username
            
        else: 

            data = serializer.errors 

        return Response(data)

всякий раз, когда я делаю POST запрос с помощью POSTMAN (посмотрите на изображение) enter image description here

Я получаю следующую ошибку: TypeError: Client() got an unexpected keyword argument 'password2'

Как я могу это исправить? Спасибо заранее

Вам необходимо перенести метод save() из класса Meta в сам класс сериализатора:

class RegistrationSerializer(serializers.ModelSerializer):

    password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
    
    class Meta:

        model = Client 
        fields = ['username', 'email', 'password', 'password2']

        extra_kwargs = {

            'password': {'write_only': True}
        }

    def save(self, **kwargs):
        client = Client(
            email = self.validated_data['email'], 
            username = self.validated_data['username'],
        )
        # rest of your code
Вернуться на верх