在一个项目中需要用户名是自动生成的代码。为此,我按照描述的要求制作了一个自定义用户模型。一切正常,但问题是当我尝试使用创建超级用户时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 = Truedef 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 userdef 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
1 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
这可以通过更改源代码来实现,但通常不是一个好主意。
如果您仍然想尝试一下,那就去吧。
找到这个文件 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同样,我并不是说这是一个好主意,但如果我绝望了,我会去的。此外,由于站点包不是存储库的一部分,因此您必须在部署应用程序的每台机器上执行此操作。
添加回答
举报
0/150
提交
取消
