7tu*_*pel 6 python django django-models django-users
我正在使用Django 1.5构建一个Web应用程序.我正在使用自定义用户模型和自定义UserManager.我按照官方Django文档的说明和示例进行操作.
现在,当我试图通过UserManager.create_user(...) 我收到一个NoneType错误来创建一个新用户时 :似乎UserManager的属性模型是None类型.我想我正在User模型中正确设置UserManager( objects = UserManager() )
我真的不知道我在哪里弄错了.展示我的编码伙伴,我是Django的新手.也许你可以帮助我们.
这是代码:
class UserManager(BaseUserManager):
"""
create a new user
@param username: the name for the new user
@param password: the password for the new user. if none is provided a random password is generated
@param person: the corresponding person object for this user
"""
def create_user(self, username, person, password=None):
if not username:
raise ValueError('User must have a valid username')
user = self.model(username=username, created=datetime.now(), must_change_password=True, deleted=False, person=person)
user.set_password(password)
user.save(using=self._db)
return user
class User(AbstractBaseUser):
## the id of the user. unique through the application
user_id = models.AutoField(primary_key=True)
## the name of the user. unique through the application
username = models.CharField(max_length=32, unique=True)
## the date when the user was created
created = models.DateTimeField()
## iff this is true the user must set a new password at next login
must_change_password = models.BooleanField(default=True)
## iff true the user is marked as deleted and can not login
deleted = models.BooleanField(default=False)
## iff true the user is admin and has all permissions. use with care!
is_admin = models.BooleanField(default=False)
## reference to the person entity that is linked to this specific user
person = models.ForeignKey(Person)
## indicates if the user is active or not
active = models.BooleanField(default=True)
## define the user manager class for User
objects = UserManager()
# necessary to use the django authentication framework: this field is used as username
USERNAME_FIELD = 'username'
Run Code Online (Sandbox Code Playgroud)
我user = self.model(..)在UserManager的create_user()方法中获取了NoneType Error
要创建新用户,您不应该致电UserManager.create_user(...).相反,你应该使用:
from django.contrib.auth import get_user_model
get_user_model().objects.create_user(...)
Run Code Online (Sandbox Code Playgroud)
这就是django经理的工作方式.你可以在这里阅读文档
我在保存自定义用户模型时也遇到了问题,花了我一段时间才弄清楚我们的
我认为代码中的重要一行是:
objects = UserManager()
Run Code Online (Sandbox Code Playgroud)
在User类中,因此要保存新用户,您需要调用
new_user=User.objects.create_user(args, args, args, etc)
Run Code Online (Sandbox Code Playgroud)
“ objects”是调用UserManager类的项目,在django