【问题标题】:How to reuse create_user code in create_superuser?如何在 create_superuser 中重用 create_user 代码?
【发布时间】:2015-01-18 19:48:04
【问题描述】:

我有一个自定义的 BaseUserManagerAbstractBaseUser。我想为我的superuser 代码重用AbstractBaseUser 中的create_user 函数,因为要求是相同的。

据我了解,我可以将传递给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 上是否安全?

【问题讨论】:

标签: python django python-2.7 django-1.7


【解决方案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, ...)

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

【讨论】:

  • 检查他们的代码,得到一个错误TypeError: _create_user() takes exactly 12 arguments (13 given)。参数(def 行)包括 self 而参数(return 行)不包括。我不明白为什么我会得到它。
  • @User 你能发布你的Manager吗?
猜你喜欢
  • 2021-12-06
  • 2013-01-20
  • 2013-06-23
  • 2015-08-07
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多