我创建了一个自定义用户模型,我在我的应用程序中成功使用。
问题是在Admin中,在用户编辑屏幕上,我显示了当前的密码哈希值,而不是用于设置密码的非常有用的界面。
我在Python 2.7上使用Django 1.5b1。
为了管理员用户界面,我如何说服Django管理员以对待本机用户的方式对待我的用户模型?
答案 0 :(得分:9)
文档建议您需要使用admin注册自定义模型,并且还要定义一些方法,以便管理界面与自定义用户模型一起使用。
您可能还需要为User定义内置表单。
来自Custom users and django.contrib.admin
您还需要向管理员注册自定义用户模型。如果您的自定义用户模型扩展了AbstractUser,则可以使用Django现有的UserAdmin类。但是,如果您的用户模型扩展了AbstractBaseUser,则需要定义自定义的ModelAdmin类。
答案 1 :(得分:1)
只需将其添加到您的表单:
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>."))
答案 2 :(得分:0)
如果你正在扩展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表单而不是在admin中更改密码。
答案 3 :(得分:0)
至少在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)