如何在 create_superuser 中重用 create_user 代码?

How to reuse create_user code in create_superuser?

我有一个自定义 BaseUserManagerAbstractBaseUser。我想为我的 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, ...)

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