2016-08-05 51 views
1

我已经设置我的Django(1.8)管理员以允许超级用户以交互方式创建新用户。我的用户模型是使用AbstractUser这意味着我的管理文件看起来像这样定制的:Django管理员:在浏览器中创建用户

admin.py

from django.contrib import admin 
from app.models import CPRUser 

class UserAdmin(admin.ModelAdmin): 

    model = CPRUser 
    extra = 1 

admin.site.register(CPRUser, UserAdmin) 

这里是模型:

class CPRUser(AbstractUser): 
    student = models.PositiveIntegerField(verbose_name=_("student"), 
              default=0, 
              blank=True) 
    saved = models.IntegerField(default=0) 

这似乎工作确定,我可以通过管理员并设置新用户的密码,用户名和所有其他自定义字段。但是,当我尝试使用新创建的用户登录时,身份验证过程的某些部分会失败。我从使用auth_views.login视图和样板django登录模板的页面登录。

另一方面,如果我在django shell中使用manage.py createsuperusercreateuser()创建新用户,这些用户可以很好地登录。这导致我怀疑它是与密码存储或哈希处理 - 目前在管理员,我可以输入一个新的用户密码。事情是,那是我想要做的。我怎样才能得到这个理想的结果 - 我希望非IT管理者(其细节我不会)能够轻松地在管理员中创建新用户。我意识到这种系统的风险。

“中的‘添加用户’管理页面比,它需要您选择一个用户名和密码标准的管理页面不同,让您编辑其余部分之前:

该文档上setting this interactive user creation up一个部分似乎是矛盾的的用户领域。“

,然后几个段落后:

“用户密码不会在管理中显示(也存储在数据库中)”

这是我管理的屏幕截图:

enter image description here

我该如何让Django接受通过管理员交互创建的用户的登录尝试?

+0

你可以提供关于认证失败的更多细节吗?即确切的例外和信息是什么? –

+0

@BasicWolf这是问题的一部分 - 挖掘身份验证失败的最简单方法是什么?我的代码都没有进行身份验证 - 这都是django auth黑匣子。 –

+0

- 但是,当我尝试使用新创建的用户登录时,身份验证过程的某些部分失败。 - 那么,您如何尝试登录新创建的用户? –

回答

3

按照documentation

如果您的自定义用户模型扩展django.contrib.auth.models.AbstractUser,你可以使用Django的现有django.contrib.auth.admin.UserAdmin类。

因此,扩展UserAdmin应该做的伎俩。