Неожиданное поле пароля в 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 (посмотрите на изображение)
Я получаю следующую ошибку:
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