我正在尝试使用Django自定义用户管理器的教程。他们中的大多数都会像文档中所说的那样覆盖create_user()和create_super_user(),但本教程将单独保留这两种方法,而是覆盖_create_user()
http://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django/
这是对的吗?重写_create_user()和create_user()有什么区别?
答案 0 :(得分:1)
以下是_create_user,create_super_user和create_user方法的代码。
def _create_user(self, username, email, password,
is_staff, is_superuser, **extra_fields):
"""
Creates and saves a User with the given username, email and password.
"""
now = timezone.now()
if not username:
raise ValueError('The given username must be set')
email = self.normalize_email(email)
user = self.model(username=username, email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email=None, password=None, **extra_fields):
return self._create_user(username, email, password, False, False,
**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return self._create_user(username, email, password, True, True,
**extra_fields)
正如您所看到的,create_user和create_super_user方法正在调用_create_user函数。方法开头的下划线表示该函数仅供内部使用。可以覆盖内部方法,但根据我的观点,设计更好地覆盖公共方法。