django中的自定义用户模型不允许在admin中设置密码

时间:2012-12-01 17:33:37

标签: python django django-admin django-1.5

我创建了一个自定义用户模型,我在我的应用程序中成功使用。

问题是在Admin中,在用户编辑屏幕上,我显示了当前的密码哈希值,而不是用于设置密码的非常有用的界面。

我在Python 2.7上使用Django 1.5b1。

为了管理员用户界面,我如何说服Django管理员以对待本机用户的方式对待我的用户模型?

4 个答案:

答案 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>."))

借鉴https://stackoverflow.com/a/15630360/780262

答案 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)