我有自定义BaseUserManager
和AbstractBaseUser
。我希望在create_user
中重用AbstractBaseUser
函数作为我的superuser
代码,因为要求是相同的。
根据我的理解,我可以将传递给create_superuser
的参数传递给create_user
,然后将其保存在函数内部,将is_admin
更改为True
然后返回它。这将回收大量代码并保持清洁。这是一种正确的方法吗?
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
拨打一次是否安全?
答案 0 :(得分:1)
看一下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, ...)
这将最小化额外的代码和数据库访问。虽然将用户保存两次没有什么特别的错误,但完全没必要。