RegisterSerializer WARNING:django.request:Bad Request:

Привет Я переопределил своего User и теперь я создаю приложение подключаю Django Forms и Django DRF с моделью. И у меня плохой POST в сериализаторе и я не знаю, почему он не работает, Это происходит, когда я меняю изображение в проекте с помощью модели, но я не знаю, почему. Я использую swagger drf для POST. Я использую default, когда аватар == None и использую ссылку, когда no.

    class CreateUserManager(BaseUserManager):
    def _create_user(self, email, password, date_of_birth, is_verified, is_admin, is_superuser, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=self.normalize_email(email),
            date_of_birth=date_of_birth,
            **extra_fields
        )
        user.is_admin = is_admin
        user.is_verified = is_verified
        user.is_superuser = is_superuser
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(
            self, email, password, date_of_birth, is_verified=False, is_admin=False,
            is_superuser=False, **extra_fields):
        return self._create_user(email, password, date_of_birth, is_verified, is_admin, is_superuser, **extra_fields)

    def create_superuser(
            self, email, password, date_of_birth, is_verified=True, is_admin=True,
            is_superuser=True, **extra_fields):
        return self._create_user(email, password, date_of_birth, is_verified, is_admin, is_superuser, **extra_fields)


class CreateUser(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(max_length=150, blank=True)
    last_name = models.CharField(max_length=150, blank=True)
    date_of_birth = models.DateField(blank=True, validators=[validate_date_of_birth])
    date_joined = models.DateTimeField(blank=False, default=timezone.now)
    username = models.CharField(max_length=150, blank=True)
    email = models.EmailField(max_length=150, blank=False, unique=True)
    is_active = models.BooleanField(default=True)
    is_verified = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)
    avatar = models.ImageField(default='./default/accounts/user/default_user.png', blank=True,
                               upload_to='./images/accounts/user/', validators=[validate_image, validate_exist_image])
    password = models.CharField(max_length=120, blank=False, validators=[validate_password])

    objects = CreateUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['date_of_birth']

    def __str__(self):
        return self.first_name

    def get_username(self):
        return self.email.split("@")[0]

    def get_avatar(self):
        return self.avatar

    @property
    def is_staff(self):
        "Is the user a member of staff?"
        return self.is_admin

    def tokens(self):
        refresh = RefreshToken.for_user(self)
        return {
            'refresh': str(refresh),
            'access': str(refresh.access_token),
        }

Теперь serializer.py

class RegisterSerializer(serializers.ModelSerializer):
    password = serializers.CharField(required=True, write_only=True, min_length=8,
                                     max_length=20, validators=[validate_password], style={'input_type': 'password'})
    password2 = serializers.CharField(required=True, write_only=True, min_length=8,
                                      max_length=20, validators=[validate_password], style={'input_type': 'password'})
    date_of_birth = serializers.DateField(default='1990-11-11', validators=[validate_date_of_birth])
    avatar = serializers.ImageField(use_url=False, validators=[
                                    validate_image, validate_exist_image], required=False)

    class Meta:
        model = CreateUser
        fields = ['first_name', 'last_name', 'date_of_birth', 'email', 'avatar', 'password', 'password2']

    def validate(self, validated_data):
        password = validated_data.get('password')
        password2 = validated_data.get('password2')
        if password != password2:
            errors = ugettext_lazy("Passwords don\'t match.")
            raise serializers.ValidationError({'password': errors})
        return validated_data

    def validate_email(self, email):
        if CreateUser.objects.filter(email=email).exists():
            msg = ugettext_lazy("User with that email exists.")
            raise serializers.ValidationError({'password': msg})
        return email

    def save(self):
        password = self.validated_data.get('password')
        user = CreateUser(
            email=self.validated_data.get('email'),
            date_of_birth=self.validated_data.get('date_of_birth')
        )
        avatar = self.validated_data.get('avatar')
        if avatar != None:
            avatar_name = avatar.name
            user.avatar = f"./images/accounts/user/{avatar_name}"
        else:
            user.avatar = user.get_avatar()
        user.username = user.get_username()
        user.set_password(password)
        user.save()
        return user

и views.py

class RegisterAPI(generics.GenericAPIView):
    serializer_class = RegisterSerializer
    parser_classes = (parsers.MultiPartParser, parsers.FormParser)

    def post(self, request):
        serializer = RegisterSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            Util.user_email_send(request, request.data['email'])
            messages.success(request, f'Your account has been created. You can check your email!')
            Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх