【问题标题】:Django: TypeError: 'is_active' is an invalid keyword argument for this functionDjango:TypeError:'is_active' 是此函数的无效关键字参数
【发布时间】:2013-11-18 19:25:27
【问题描述】:

当我尝试通过 createsuperuser 管理命令创建用户时,我不断收到此错误:

TypeError: 'is_active' 是此函数的无效关键字参数

我尝试添加 is_active 字段,但无济于事。还尝试弄乱 REQUIRED_FIELDS 因为 django 文档说它们必须匹配 create_superuser 字段。仍然没有运气。

非常感谢您的指导。谢谢!这是我正在使用的自定义用户模型:

class CustomUserManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, **extra_fields):
    """
    Creates and saves a User with the given email and password.
    """
    now = timezone.now()

    if not email:
        raise ValueError('The given email must be set')

    email = self.normalize_email(email)
    user = self.model(email=email,
                      is_staff=is_staff, is_active=True,
                      is_superuser=is_superuser, last_login=now,
                      date_joined=now, **extra_fields)
    user.set_password(password)
    user.save(using=self._db)
    return user

def create_user(self, email, password=None, **extra_fields):
    return self._create_user(email, password, False, False, **extra_fields)

def create_superuser(self, email, password, **extra_fields):
    return self._create_user(email, password, True, True, **extra_fields)

class Company(models.Model):
    company_name = models.CharField(max_length=200)

class CustomUser(AbstractBaseUser):
    your_name   = models.CharField(max_length=254, blank=True)
    company     = models.ForeignKey(Company)
    email       = models.EmailField(blank=True, unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['your_name',]

    objects = CustomUserManager()

更新省略 is_active = True from user = self.model。新错误是:*TypeError: 'is_superuser' is an invalid keyword argument for this function*

【问题讨论】:

  • 你是如何调用创建超级用户的?
  • 第一次运行syncdb时,当它询问你是否想创建你的第一个超级用户时:“你刚刚安装了Django的auth系统,这意味着你没有定义任何超级用户。你会现在想创建一个吗?”
  • 如果省略is_active,会发生什么?(对于AbstractBaseUser,无论如何默认为True)。
  • 从 user = self.model 中移除 is_active = true。现在我收到错误 TypeError: 'is_superuser' is an invalid keyword argument for this function
  • 别忘了PermissionsMixin

标签: python django


【解决方案1】:

我遇到了完全相同的错误,遵循 Mike Hibbert 的关于定义自定义用户的优秀高级教程:http://www.mikesdjangotutorials.co.uk/ 我能够通过将这些字段添加到我的 CustomUser 来使其工作:

date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
is_active   = models.BooleanField(default=True)
is_admin    = models.BooleanField(default=False)
is_staff    = models.BooleanField(default=False)

...我会假设它们是从 AbstractBaseUser 继承的,但果然,它们在文档中解释得足够清楚:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#custom-users-and-django-contrib-admin 请注意,如果您希望您的 CustomUser 在您的Django Admin 也是如此(从注册等开始)

【讨论】:

  • 我也在使用 Mike 的优秀视频教程!我最终想通了,但忘了发布更新,所以谢谢你。干杯!
  • 我的问题是我忘记了PermissionsMixin
【解决方案2】:

您应该从该调用中删除模型 (CustomUser) init 方法和基类 init 方法中未使用的每个参数:

user = self.model(email=email,
                  is_staff=is_staff, is_active=True,
                  is_superuser=is_superuser, last_login=now,
                  date_joined=now, **extra_fields)

您已经从 AbstractBaseUser 派生了 CustomUser,没有 init 并从 models.Model 派生。这意味着您只能将您在模型上定义的字段的名称传递给 init:

user = self.model(email=email, your_name=something, company=something)

尝试从AbstractUser派生CustomUser

【讨论】:

  • 我将字段添加到 CustomUser。现在我得到 AttributeError: 'NoneType' object has no attribute '_state' 感谢您的帮助!
  • (这发生在我添加公司之后)。我将公司字段添加到“REQUIRED_FIELDS”,因为我遇到了完整性错误。
  • 我为公司设置了 null = True,blank = True 并将其从 REQUIRED_FIELDS 中删除。它现在工作正常,但我不确定这是否是正确的方法。
  • 没关系。现在,当我尝试登录管理员时,我得到“CustomUser”对象没有属性“has_module_perms”
  • 我认为您应该在此处的 django 源代码 contrib/auth/models.py 中查看身份验证模型。它很小很简单
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 2017-05-04
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2012-07-07
  • 2013-07-13
相关资源
最近更新 更多