Django Admin:在浏览器中创建用户

时间:2016-08-05 09:54:43

标签: python django django-admin

我已经设置了我的Django(1.8)管理员,允许超级用户以交互方式创建新用户。我的用户模型是使用AbstractUser自定义的,这意味着我的管理文件如下所示:

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接受通过管理员以交互方式创建的用户的登录尝试?

1 个答案:

答案 0 :(得分:3)

根据documentation

  

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

因此,扩展DataTable resultTable = table.Clone(); // empty table with correct columns if(rowsOfInterest.Count > 0) resultTable = rowsOfInterest.CopyToDataTable(); 应该可以解决问题。