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)