2 回答

TA貢獻1876條經驗 獲得超5個贊
首先,您正在使用自定義用戶模型。在您的設置文件中,您是否告訴django使用您的模型而不是默認的auth.models.User?
第二,
您正在create_superuser函數中調用self.create_user。
您是否也覆蓋create_user函數?
如果是,請提供實施方案。
更新
您不需要像以前那樣更改實現用戶管理器的功能。如果您在django.auth.models中查看UserManger的實現。您可以從那里獲得靈感,并且避免犯錯-例如:創建標準用戶時不保存模型,因為您不調用保存方法。
我建議像這樣更改您的UserManager:
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password,
**extra_fields):
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
extra_fields.setdefault('is_active', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
添加回答
舉報