Django 自定义用户模型和用户管理器

新手上路,请多包涵

我正在使用 Django 1.5 构建一个 Web 应用程序。我正在使用带有自定义 UserManager 的自定义用户模型。我遵循了官方 Django 文档的说明和示例。

现在,当我尝试通过 UserManager.create_user(...) 创建新用户时,我收到一个 NoneType 错误:UserManager 的属性模型似乎是 None 类型。我想我在用户模型中正确设置了 UserManager ( objects = UserManager() )

我真的不知道我在哪里犯了错误。 Booth 我的编码合作伙伴,我是 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'

我在 UserManager 的 create_user() 方法中的 user = self.model(..) 行收到 NoneType 错误

原文由 7tupel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
1 个回答

我在保存自定义用户模型时也遇到了问题,我花了很长时间才弄明白我们的

我认为您的代码中重要的一行是:

 objects     =   UserManager()

在 User 类中,因此为了保存您需要调用的新用户

new_user=User.objects.create_user(args, args, args, etc)

objects ”是调用 UserManager 类的项目,在 django 中被称为经理

原文由 colins44 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题