我创建了我成功地利用我的应用程序中的自定义用户模型。
问题是,管理内,用户编辑屏幕上,我得到了本密码哈希的显示,而不是非常有用的界面来设置密码。
我使用的Python 2.7的Django 1.5b1。
我怎样才能说服Django管理来治疗我的用户模型,它把原有用户,管理员用户界面的缘故以同样的方式?
我创建了我成功地利用我的应用程序中的自定义用户模型。
问题是,管理内,用户编辑屏幕上,我得到了本密码哈希的显示,而不是非常有用的界面来设置密码。
我使用的Python 2.7的Django 1.5b1。
我怎样才能说服Django管理来治疗我的用户模型,它把原有用户,管理员用户界面的缘故以同样的方式?
文件建议你需要注册与管理的自定义模型,也定义了一些方法,以及让管理员界面自定义用户样板工程。
您可能还需要定义用户内置的形式。
从自定义用户和django.contrib.admin
您还需要与管理员登记您的自定义用户模型。 如果您的自定义用户模型扩展AbstractUser,你可以使用Django的现有UserAdmin类。 但是,如果您的用户模型扩展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>."))
从借用https://stackoverflow.com/a/15630360/780262
如果你正在扩大AbstractBaseUser,你需要两种形式,一种创造的形式,没有密码的更新形式,从衍生的ModelForm。
然后在管理形式,指定单独创建和更新的形式,与相应的字段集一起:
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的形式,而不是在管理员密码更改。
至少在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)