我已设置我的 Django (1.8) 管理员以允许 super 用户以交互方式创建新用户。我的用户模型是使用 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 View 和样板 django 登录模板的页面登录。
另一方面,如果我在 django shell 中使用 manage.py createsuperuser 或 createuser() 创建一个新用户,这些用户可以正常登录。这让我怀疑它与密码存储或散列有关 - 目前在管理员中我只能输入新用户的密码。事情是,这就是我想要做的。我怎样才能得到这个期望的结果 - 我希望非 IT 精明的经理(我不会知道他们的详细信息)能够轻松地在管理员中创建新用户。我知道这种系统的风险。
setting this interactive user creation up 上的文档似乎自相矛盾在一个部分中:
““添加用户”管理页面与标准管理页面不同,它要求您先选择用户名和密码,然后才能编辑用户的其余字段。”
然后是几段之后:
“用户密码不显示在管理中(也不存储在数据库中)”
这是我的管理员的屏幕截图:
如何让 Django 接受通过管理员交互创建的用户的登录尝试?
请您参考如下方法:
这在 documentation 中有描述,
If your custom User model extends django.contrib.auth.models.AbstractUser, you can use Django’s existing django.contrib.auth.admin.UserAdmin class.
因此,扩展 UserAdmin 应该可以解决问题。
