如何在 create_superuser 中重用 create_user 代码?
How to reuse create_user code in create_superuser?
我有一个自定义 BaseUserManager
和 AbstractBaseUser
。我想为我的 superuser
代码重用 AbstractBaseUser
中的 create_user
函数,因为要求是相同的。
据我所知,我可以将传递给 create_superuser
的参数直接传递给 create_user
,然后将其保存在函数内部,将 is_admin
更改为 True
然后 return 它。这将回收大量代码并保持整洁。这是正确的方法吗?
def create_superuser(self, email, var2, var3, var4, etc...):
user = create_user(email, var2, var3, var4, etc...)
user.is_admin = True
user.save(using=self._db)
return user
我主要想知道对同一用户调用 user.save(using=self._db)
两次,一次在 create_user
中,一次在 create_superuser
中是否安全?
看看如何 Django did it:
class MyCustomUserManager(models.Manager):
def _create_user(self, email, is_staff, is_superuser, ...):
...
def create_user(self, email, ...):
return self._create_user(email, False, False, ...)
def create_superuser(self, email, ...):
return self._create_user(email, True, True, ...)
这将最大限度地减少额外代码和数据库访问。虽然两次保存用户并没有什么特别的错误,但完全没有必要。
我有一个自定义 BaseUserManager
和 AbstractBaseUser
。我想为我的 superuser
代码重用 AbstractBaseUser
中的 create_user
函数,因为要求是相同的。
据我所知,我可以将传递给 create_superuser
的参数直接传递给 create_user
,然后将其保存在函数内部,将 is_admin
更改为 True
然后 return 它。这将回收大量代码并保持整洁。这是正确的方法吗?
def create_superuser(self, email, var2, var3, var4, etc...):
user = create_user(email, var2, var3, var4, etc...)
user.is_admin = True
user.save(using=self._db)
return user
我主要想知道对同一用户调用 user.save(using=self._db)
两次,一次在 create_user
中,一次在 create_superuser
中是否安全?
看看如何 Django did it:
class MyCustomUserManager(models.Manager):
def _create_user(self, email, is_staff, is_superuser, ...):
...
def create_user(self, email, ...):
return self._create_user(email, False, False, ...)
def create_superuser(self, email, ...):
return self._create_user(email, True, True, ...)
这将最大限度地减少额外代码和数据库访问。虽然两次保存用户并没有什么特别的错误,但完全没有必要。