我已经设置了我的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 createsuperuser
或createuser()
创建新用户,这些用户可以正常登录。这让我怀疑它与密码存储或散列有关 - 目前在管理员中我可以输入新用户的密码。事情是,这是我想要做的。如何才能获得这个理想的结果 - 我希望非IT资深管理人员(我赢得的详细信息)能够轻松地在管理员中创建新用户。我知道这种系统存在风险。
文档在setting this interactive user creation up的一个部分中似乎是矛盾的:
"“添加用户”管理页面与标准管理页面不同,它要求您在允许编辑用户其余字段之前选择用户名和密码。"
然后再说几段:
"用户密码不会显示在管理员中(也不会存储在数据库中)"
以下是我的管理员的屏幕截图:
如何让Django接受通过管理员以交互方式创建的用户的登录尝试?
答案 0 :(得分:3)
如果您的自定义用户模型扩展了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();
应该可以解决问题。