【问题标题】:Create superuser using python manage.py customize the message in Django使用 python manage.py 创建超级用户在 Django 中自定义消息
【发布时间】:2020-02-11 08:32:34
【问题描述】:

在一个项目中要求用户名是自动生成的代码。为此,我按照描述的要求制作了一个自定义用户模型。一切正常,但问题是当我尝试使用创建超级用户时

python manage.py createsuperuser

正如我所描述的,用户名是一个自动生成的字段。但是控制台要求我输入用户名。 创建超级用户帐户后,需要打印用户代码,因为我需要登录代码以及成功创建超级用户。

如何获得此功能?我在谷歌上搜索,但找不到任何合适的解决方案。

这是我的模型:

class User(AbstractBaseUser, PermissionsMixin):
"""Custom user model"""
code = models.CharField(max_length=20, unique=True, blank=False)
email = models.EmailField(max_length=255, unique=True, null=True)
name = models.CharField(max_length=255)
address = models.CharField(max_length=255, blank=True)
nid = models.CharField(max_length=30, blank=True)
profile_pic = models.CharField(max_length=255, blank=True)
gender = models.CharField(max_length=10, choices=[('Male', 'Male'), ('Female', 'Female'), ('Other', 'Other')])

is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)

objects = UserManager()
USERNAME_FIELD = 'code'
REQUIRED_FIELDS = ['name']

这是我的自定义用户管理器:

class UserManager(BaseUserManager):
use_in_migrations = True

def create_user(self, password, **extra_fields):
    """Create new user with auto-generated code and password"""
    if 'name' not in extra_fields.keys():
        raise ValueError('Name must be needed')
    code = code_generator.generate_employee_code(extra_fields['name'][:2])
    user = self.model(code=code, **extra_fields)
    user.set_password(password)
    if 'email' in extra_fields.keys():
        email = self.normalize_email(extra_fields['email'])
        user.email = email
    try:
        user.save(using=self._db)
    except IntegrityError as e:
        raise ValueError("Email has already been used")
    return user

def create_superuser(self, name, password):
    """Create and save super user"""
    user = self.create_user(password=password, name=name)
    user.is_staff = True
    user.is_superuser = True
    user.is_admin = True
    user.save(using=self._db)
    return user

【问题讨论】:

    标签: python django python-3.x django-models


    【解决方案1】:

    这可以通过更改源代码来实现,但通常不是一个好主意。

    如果你还想试试看,那就去吧。

    找到这个文件createsuperuser.py(site-packages->django->contrib->auth->management>commands)并在正确的地方添加代码。

    class Command(BaseCommand):
        ...
        ...
        def handle(self, *args, **options):
        ...
        ...
            if username:
                ...
                if options['verbosity'] >= 1:
                    ...
                    self.stdout.write("User name:" + username) # add this code
    

    再一次,我并不是说这是个好主意,但如果我绝望了,我会去的。此外,由于站点包不是存储库的一部分,因此您必须在部署应用程序的每台机器上执行此操作。

    【讨论】:

    • 您也可以为 manage.py 编写自己的命令。 /management/commands/my-command.py。然后你可以用 python manage.py my-command 运行它。
    猜你喜欢
    • 2015-12-08
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多