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):
        ...
Вернуться на верх