在Django自定义用户模型不允许管理员设置密码(Custom user model in djan

2019-08-03 10:01发布

我创建了我成功地利用我的应用程序中的自定义用户模型。

问题是,管理内,用户编辑屏幕上,我得到了本密码哈希的显示,而不是非常有用的界面来设置密码。

我使用的Python 2.7的Django 1.5b1。

我怎样才能说服Django管理来治疗我的用户模型,它把原有用户,管理员用户界面的缘故以同样的方式?

Answer 1:

文件建议你需要注册与管理的自定义模型,也定义了一些方法,以及让管理员界面自定义用户样板工程。

您可能还需要定义用户内置的形式。

从自定义用户和django.contrib.admin

您还需要与管理员登记您的自定义用户模型。 如果您的自定义用户模型扩展AbstractUser,你可以使用Django的现有UserAdmin类。 但是,如果您的用户模型扩展AbstractBaseUser,你需要定义一个自定义的ModelAdmin类。



Answer 2:

只需添加到您的表格:

  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



Answer 3:

如果你正在扩大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的形式,而不是在管理员密码更改。



Answer 4:

至少在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)


文章来源: Custom user model in django does not allow setting password in admin