Django проверяет имя пользователя при регистрации по регулярному выражению разрешенных имен пользователей - PullRequest
1 голос
/ 05 октября 2019

Я хотел бы проверить имя пользователя при регистрации по регулярному выражению (которое в настоящее время не является регулярным выражением, см. Код ниже). Я не хочу, чтобы новый пользователь использовал имена пользователей, такие как «admin, support, staff» и т. Д. Я просто пытался написать для себя валидатор, но, к сожалению, я не работал с regex или валидацией, как это раньше, так как яЯ новичок в кодировании, может быть, кто-томожет помочь мне в этом:

models.py

class User(AbstractBaseUser):
   ...
   user = models.CharField(verbose_name='Username', max_length=20, unique=True, validators=username_filter)
   ...

validators.py

из django.core.exceptions import ValidationError из django.core.validators import RegexValidator

def username_filter(value):
    invalid_username_regex = RegexValidator(
                regex=("admin", "staff", "supporter", "support")
            ),
    if value in invalid_username_regex:
        raise ValidationError(u'Its not possible to signup with a username like this, please try a different one')

но в настоящее время я получаю следующую ошибку:

user = models.CharField (verbose_name = 'Username', max_length = 15, unique = True, validators = username_filter)Файл "/venv/lib/python3.7/site-packages/django/db/models/fields/init.py", строка 1039, в init app |
Файл super (). init (* args, ** kwargs) "/venv/lib/python3.7/site-packages/django/db/models/fields/init. py ", строка 171, в init app |
self._validators = list (валидаторы) # Сохранять для последующей деконструкции TypeError: объект 'function' не повторяется

Я даже не знаю, действительно ли имеет смысл использовать валидатор в models.py ... может быть, гораздо эффективнее реализовать это в forms.py, так как в противном случае при этом также будет отображаться ошибка. Войдите в систему, если в систему войдет настоящий администратор ...

ОБНОВЛЕНИЕ:

Я только что удалил валидатор из models.py и переместился в forms.py следующим образом:

class RegistrationForm(UserCreationForm):
    user = forms.CharField(required=True, validators=[username_filter])

но, похоже, ничего не дает

заранее спасибо

...