Django UserManager create_user 失败,“NoneType”对象不可调用

cph*_*117 3 python authentication django model

我几乎逐字地遵循了这个自定义 Django 用户模型示例中的代码,当我尝试创建一个用户时,它在最后一个参数上失败self.model并出现错误

TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)

相关代码片段如下:

class MyUserManager(BaseUserManager):

def create_user(self, email, password=None, 
                first_name=None, 
                last_name=None
               ):
    now = timezone.now()
    if not email:
        raise ValueError('The given email must be set')
    email = self.normalize_email(email)

    user = self.model(email=email, 
                        first_name=first_name, 
                        last_name=last_name
                      )

    user.set_password(password)
    user.save(using=self._db)
    return user

class MyUser(AbstractBaseUser, PermissionsMixin):

email = models.EmailField(_('email address'), max_length=254, unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=False)
last_name = models.CharField(_('last name'), max_length=30, blank=False)

objects = MyUserManager()

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

class Meta:
    verbose_name = _('user')
    verbose_name_plural = _('users')

def get_full_name(self):
    """
    Returns the first_name plus the last_name, with a space in between.
    """
    full_name = '%s %s' % (self.first_name, self.last_name)
    return full_name.strip()
Run Code Online (Sandbox Code Playgroud)

看起来self.modelNone,但我认为objects = MyUserManager()输入MyUser是将两者联系起来的原因。

回溯:

Traceback (most recent call last):
  File "api/tests/test_location.py", line 24, in setUp
    first_name=first_name, last_name=last_name)
  File "api/models.py", line 99, in create_user
    last_name=last_name
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

MyUserManager().create_user(email=email, password=password, first_name=first_name, 
            last_name=last_name)
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 7

MyUserManager如果您直接实例化它并create_user像这样调用方法,则不会有模型实例附加到该实例。您应该改为从您的MyUser模型中进行调用:

my_user = MyUser.objects.create_user(email=email, 
                                     password=password, 
                                     first_name=first_name, 
                                     last_name=last_name)
Run Code Online (Sandbox Code Playgroud)