我创建了一个自定义用户模型,我在我的应用程序中成功使用了它。
问题是在管理员中,在用户编辑屏幕上,我得到了当前密码哈希的显示,而不是用于设置密码的非常有用的界面。
我在 Python 2.7 上使用 Django 1.5b1。
为了管理用户界面,我如何说服 Django 管理员像对待本机用户一样对待我的用户模型?
我创建了一个自定义用户模型,我在我的应用程序中成功使用了它。
问题是在管理员中,在用户编辑屏幕上,我得到了当前密码哈希的显示,而不是用于设置密码的非常有用的界面。
我在 Python 2.7 上使用 Django 1.5b1。
为了管理用户界面,我如何说服 Django 管理员像对待本机用户一样对待我的用户模型?
文档建议您需要向 admin 注册自定义模型,并定义一些方法,以便管理界面与自定义用户模型一起使用。
您可能还必须为用户定义内置表单。
您还需要向管理员注册您的自定义用户模型。如果您的自定义用户模型扩展了 AbstractUser,您可以使用 Django 现有的 UserAdmin 类。但是,如果您的 User 模型扩展了 AbstractBaseUser,您将需要定义一个自定义 ModelAdmin 类。
只需将其添加到您的表单中:
password = ReadOnlyPasswordHashField(
label= ("Password"),
help_text= ("Raw passwords are not stored, so there is no way to see "
"this user's password, but you can change the password "
"using <a href=\"password/\">this form</a>."))
至少在 1.10 中,我能够做到以下几点。比上面的简单。我把它放在 admin.py 中:
from django.contrib.auth.admin import UserAdmin
from django.contrib import admin
from myapp.models import MyUser
class MyUserAdmin(UserAdmin):
model = MyUser
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': ('a_custom_field',)}),
)
admin.site.register(MyUser, MyUserAdmin)
如果您正在扩展 AbstractBaseUser,您将需要两个表单,一个创建表单,一个不带密码的更新表单,从 ModelForm 派生。
然后在 Admin 表单中,指定单独的创建和更新表单,以及相应的字段集:
class MyUserAdmin(UserAdmin):
# The forms to add and change user instances
form = UserChangeForm
add_form = UserCreationForm
fieldsets = (
(None, {'fields': ('email', 'first_name', 'last_name')}),
)
add_fieldsets = (
(None, {'fields': ('email', 'password', 'password2', 'first_name', 'last_name')}),
)
新用户的密码将起作用。在预定义的 django 表单中而不是在管理员中更改密码。