я хотел отправить почтовый запрос с телом, содержащим адрес электронной почты, имя пользователя, пароль и пароль 2.
класс сериализатора имеет метод сохранения, который был переопределен, чтобы он проверял, что пароль1 равен паролю2 или не . если равно, я хотел, чтобы объект пользователя был создан с именем пользователя электронной почты и паролем. и хотел, чтобы его спасли. Я использую модель пользователя django.
error: TypeError: Получил TypeError
при вызове User.objects.create()
. Это может быть связано с тем, что у вас есть доступное для записи поле в классе сериализатора, которое не является допустимым аргументом для User.objects.create()
. Возможно, вам потребуется сделать поле доступным только для чтения или переопределить метод RegistrationSerializer.create () для правильной обработки.
Класс сериализатора:
class RegistrationSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = User
fields = ['email', 'username', 'password','password2']
extra_kwargs = {'password': {'write_only': True}}
# override one of its method to check if passwords match
def save(self):
user = User()
#cant create user py passing into constructor
user.email=self.validated_data['email']
user.username=self.validated_data['username']
password=self.validated_data['password']
password2=self.validated_data['password2']
if password!=password2:
raise serializers.ValidationError({'password':'password must match'})
user.set_password(password)
user.save()
return user
представление с именем:
@api_view(['POST', ])
def registration_view(request):
serializer=RegistrationSerializer(data=request.data)
data={}
if serializer.is_valid():
user=serializer.save()
data['response']="successfully created"
data['email']=user.email
data['username']=user.username
else:
data=serializer.errors
return Response(data)