如何在create_superuser中重用create_user代码?

时间:2015-01-18 19:48:04

标签: python django python-2.7 django-1.7

我有自定义BaseUserManagerAbstractBaseUser。我希望在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拨打一次是否安全?

1 个答案:

答案 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, ...)

这将最小化额外的代码和数据库访问。虽然将用户保存两次没有什么特别的错误,但完全没必要。