, поэтому у меня есть приложение для электронной коммерции с интерфейсом Django Admin.Я хочу, чтобы сотрудники, которые будут использовать администратора, могли создавать пользователей.Проблема заключается в том, что встроенная проверка правильности регулярных выражений применима только к клиентской стороне, и когда сотрудник хочет создать нового пользователя с помощью администратора, мое использование Django Validators выдает ошибку при попытке создать пользователя.
Мне было интересно, был ли (1) способ повторно использовать мой класс UserManager (унаследованный от models.Manager), который обрабатывает проверку на стороне клиента, также с администратором Django.Если нет, то (2) если бы я полагался на Django Validators, как я мог очистить код, чтобы не выдавать ошибки вроде:
TypeError: "object of type 'int' has no len()
Я сделал небольшую домашнюю работу, пытаясь выяснить этои нашел этот поток: TypeError: объект типа 'int' не нуждается в помощи len (), необходимой для устранения ошибки
Это в основном объясняет, что в этом примере выдается ошибка, потому что он пытается вызвать len() на int вместо списка.Чего я не понимаю, почему я не получаю ту же ошибку на стороне клиента, когда пользователь регистрируется?
В любом случае, я не могу понять, как реализовать решениеучитывая, как я настроил свой UserManager.Я не использую Django Forms и пытался дурачиться с некоторыми из чистых методов, но также пытаюсь не повторяться, повторно используя проверку, которую я уже написал в UserManager.
Вот мой код, спасибоза любую помощь!
models.py
class UserManager(models.Manager):
def validation(self, postData, error_validation):
errors = {}
if error_validation == 'register':
if not NAME_REGEX.match(postData['first_name']):
errors['first_name'] = "First name can only contain letters."
if not NAME_REGEX.match(postData['last_name']):
errors['last_name'] = "Last name can only contain letters."
elif User.objects.filter(email=postData['email']):
errors['email'] = "Email already being used."
elif len(postData['password']) < 8:
errors['password'] = "Password must contain 8 or more characters."
elif not postData['password'] == postData['confirm_password']:
errors['password'] = "Both passwords must match!"
if error_validation == 'login':
user = User.objects.filter(email=postData['email'])
if not user or not bcrypt.checkpw(postData['password'].encode(), user[0].password.encode()):
errors['user_login'] = "Invalid credentials."
return errors
class User(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
dob = models.DateField()
address = models.CharField(max_length=100)
city = models.CharField(max_length=35)
state = models.CharField(max_length=2)
zipcode = models.IntegerField(validators=[MinLengthValidator(5), MaxLengthValidator(10)])
phone = models.IntegerField(validators=[MinLengthValidator(10), MaxLengthValidator(10)])
email = models.CharField(max_length=65)
password = models.CharField(max_length=255)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
objects = UserManager()
def __str__(self):
return self.email