在一個(gè)項(xiàng)目中需要用戶名是自動生成的代碼。為此,我按照描述的要求制作了一個(gè)自定義用戶模型。一切正常,但問題是當(dāng)我嘗試使用創(chuàng)建超級用戶時(shí)python manage.py createsuperuser正如我所描述的,用戶名是一個(gè)自動生成的字段。但是控制臺要求我輸入用戶名。創(chuàng)建超級用戶帳戶后,需要打印用戶代碼,因?yàn)槲倚枰卿洿a以及成功創(chuàng)建超級用戶。我怎樣才能獲得這個(gè)功能?我在谷歌上搜索,但找不到任何合適的解決方案。這是我的模型: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貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
這可以通過更改源代碼來實(shí)現(xiàn),但通常不是一個(gè)好主意。
如果您仍然想嘗試一下,那就去吧。
找到這個(gè)文件 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
同樣,我并不是說這是一個(gè)好主意,但如果我絕望了,我會去的。此外,由于站點(diǎn)包不是存儲庫的一部分,因此您必須在部署應(yīng)用程序的每臺機(jī)器上執(zhí)行此操作。
添加回答
舉報(bào)
0/150
提交
取消