我几乎逐字地遵循了这个自定义Django用户模型example中的代码,当我尝试创建用户时,它在self.model
的最后一个参数上失败并显示错误
TypeError: 'NoneType' object is not callable
相关的代码段如下:
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()
看起来self.model
是None
,但我认为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
我称之为:
MyUserManager().create_user(email=email, password=password, first_name=first_name,
last_name=last_name)
答案 0 :(得分:4)
如果直接实例化并且调用MyUserManager
方法,则create_user
的实例不会附加模型实例。您应该从MyUser
模型中拨打电话:
my_user = MyUser.objects.create_user(email=email,
password=password,
first_name=first_name,
last_name=last_name)