Невозможно создать пользовательского пользователя Django на странице администратора Django. ⇐ Python
-
Anonymous
Невозможно создать пользовательского пользователя Django на странице администратора Django.
Я создал пользовательскую модель пользователя с именем User, которая наследуется от AbstractUser и добавляет два дополнительных поля для двухфакторной аутентификации (otp_base32 и otp_auth_url). Кроме того, Я определил собственный менеджер (CustomUserManager), который расширяет BaseUserManager и генерирует поля otp_base32 otp_auth_url пользователя, используя библиотеку pyotp. Теперь, когда я создаю пользователя на странице администрирования Django, поля otp_base32 и otp_auth_url не генерируются, однако я определил такие функции в Custom Manager.
models.py
из моделей импорта django.db из django.contrib.auth.models импортировать AbstractUser из .managers импортировать CustomUserManager Пользователь класса (AbstractUser): otp_base32 = models.CharField("2FA base32", max_length=255, пустое=True) otp_auth_url = models.CharField("URL-адрес 2FA", max_length=255, пустое=True) USERNAME_FIELD = 'имя пользователя' ОБЯЗАТЕЛЬНЫЕ_ПОЛЯ = [] объекты = CustomUserManager() managers.py
из django.contrib.auth.base_user import BaseUserManager из django.utils.translation импортируйте gettext_lazy как _ импортировать PYOTP класс CustomUserManager(BaseUserManager): def create_user(self, имя пользователя, пароль, **extra_fields): если не имя пользователя: поднять ValueError(_("Имя пользователя должно быть установлено")) пользователь = self.model(имя пользователя=имя пользователя, **extra_fields) user.set_password(пароль) otp_base32 = pyotp.random_base32() user.otp_base32 = otp_base32 user.otp_auth_url = pyotp.totp.TOTP(otp_base32).provisioning_uri( name=имя пользователя, Issuer_name="starglassonline.uz") пользователь.сохранить() вернуть пользователя def create_superuser(self, имя пользователя, пароль, **extra_fields): extra_fields.setdefault("is_staff", True) extra_fields.setdefault("is_superuser", True) extra_fields.setdefault("is_active", True) если extra_fields.get("is_staff") не истинно: поднять ValueError(_("У суперпользователя должно быть is_staff=True.")) если extra_fields.get("is_superuser") не истинно: поднять ValueError(_("У суперпользователя должно быть is_superuser=True.")) return self.create_user(имя пользователя, пароль, **extra_fields) admin.py:
от администратора импорта django.contrib из .models импортировать пользователя admin.site.register(Пользователь) Я хочу, чтобы поля 2FA генерировались при создании пользователя на странице администрирования Django. Как это решить?
Я создал пользовательскую модель пользователя с именем User, которая наследуется от AbstractUser и добавляет два дополнительных поля для двухфакторной аутентификации (otp_base32 и otp_auth_url). Кроме того, Я определил собственный менеджер (CustomUserManager), который расширяет BaseUserManager и генерирует поля otp_base32 otp_auth_url пользователя, используя библиотеку pyotp. Теперь, когда я создаю пользователя на странице администрирования Django, поля otp_base32 и otp_auth_url не генерируются, однако я определил такие функции в Custom Manager.
models.py
из моделей импорта django.db из django.contrib.auth.models импортировать AbstractUser из .managers импортировать CustomUserManager Пользователь класса (AbstractUser): otp_base32 = models.CharField("2FA base32", max_length=255, пустое=True) otp_auth_url = models.CharField("URL-адрес 2FA", max_length=255, пустое=True) USERNAME_FIELD = 'имя пользователя' ОБЯЗАТЕЛЬНЫЕ_ПОЛЯ = [] объекты = CustomUserManager() managers.py
из django.contrib.auth.base_user import BaseUserManager из django.utils.translation импортируйте gettext_lazy как _ импортировать PYOTP класс CustomUserManager(BaseUserManager): def create_user(self, имя пользователя, пароль, **extra_fields): если не имя пользователя: поднять ValueError(_("Имя пользователя должно быть установлено")) пользователь = self.model(имя пользователя=имя пользователя, **extra_fields) user.set_password(пароль) otp_base32 = pyotp.random_base32() user.otp_base32 = otp_base32 user.otp_auth_url = pyotp.totp.TOTP(otp_base32).provisioning_uri( name=имя пользователя, Issuer_name="starglassonline.uz") пользователь.сохранить() вернуть пользователя def create_superuser(self, имя пользователя, пароль, **extra_fields): extra_fields.setdefault("is_staff", True) extra_fields.setdefault("is_superuser", True) extra_fields.setdefault("is_active", True) если extra_fields.get("is_staff") не истинно: поднять ValueError(_("У суперпользователя должно быть is_staff=True.")) если extra_fields.get("is_superuser") не истинно: поднять ValueError(_("У суперпользователя должно быть is_superuser=True.")) return self.create_user(имя пользователя, пароль, **extra_fields) admin.py:
от администратора импорта django.contrib из .models импортировать пользователя admin.site.register(Пользователь) Я хочу, чтобы поля 2FA генерировались при создании пользователя на странице администрирования Django. Как это решить?