Django - BaseSerializer.save() принимает 1 позиционный аргумент, но было задано 2
При реализации регистрации произошла следующая ошибка. Когда я отправляю запрос get, значение поля отображается нормально, но когда я отправляю запрос post, возникает следующая ошибка.
[ BaseSerializer.save() принимает 1 позиционный аргумент, но было задано 2 ]
Что мне делать? Помогите мне, пожалуйста. ㅠ_ㅠ
<serializers.py>
from .models import User from dj_rest_auth.registration.serializers import RegisterSerializer from rest_framework import serializers
class SignUpSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['email', 'password', 'realname', 'nickname', 'address', 'phone', 'height', 'weight']
def save(self, request):
user = super().save(request)
realname = self.data.get('realname')
nickname = self.data.get('nickname')
address = self.data.get('nickname')
phone = self.data.get('phone')
height = self.data.get('height')
weight = self.data.get('weight')
if realname:
user.realname = realname
if nickname:
user.nickname = nickname
if address:
user.address = address
if phone:
user.phone = phone
if height:
user.height = height
if weight:
user.weight = weight
user.save()
return user
<models.py> class User(AbstractUser): имя пользователя = None email = models.EmailField(max_length=255, unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
realname = models.CharField(max_length=50, blank=True)
nickname = models.CharField(max_length=50, blank=True)
address = models.CharField(max_length=200, blank=True)
phone = models.CharField(max_length=100, blank=True)
height = models.DecimalField(max_digits=4, decimal_places=1, default=0)
weight = models.DecimalField(max_digits=4, decimal_places=1, default=0)
def __str__(self):
return self.email
<setting.py>
REST_AUTH_REGISTER_SERIALIZERS = {
'REGISTER_SERIALIZER': 'accounts.serializers.SignUpSerializer'
}
Вы должны использовать django-rest-auth
, и вы хотите настроить сериализатор регистров.
Я думаю, что родительский класс SignUpSerialier
неправильно указан. Он должен быть rest_auth.registration.serializers.RegisterSerializer
, а не ModelSerializer
.
Это не сериализатор моделей, поэтому дополнительные поля нужно задавать вручную.
Вы должны быть внимательны, чтобы правильно указать тип в соответствии с типом поля модели User
. (serializers.CharField, serializers.IntegerField, и т.д.)
Получив производную от RegisterSerializer
, вы можете переопределить метод save(self, request)
.
class SignUpSerializer(RegisterSerializer):
realname = serializers.CharField(required = True)
nickname = ...
address = ...
phone = ...
height = ...
weight = ...
def save(self, request):
...