5

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

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

我在 Python 2.7 上使用 Django 1.5b1。

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

4

4 回答 4

10

文档建议您需要向 admin 注册自定义模型,并定义一些方法,以便管理界面与自定义用户模型一起使用。

您可能还必须为用户定义内置表单。

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

您还需要向管理员注册您的自定义用户模型。如果您的自定义用户模型扩展了 AbstractUser,您可以使用 Django 现有的 UserAdmin 类。但是,如果您的 User 模型扩展了 AbstractBaseUser,您将需要定义一个自定义 ModelAdmin 类。

于 2012-12-01T17:45:34.383 回答
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

于 2014-12-17T19:13:26.400 回答
1

至少在 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)
于 2017-01-29T08:18:41.473 回答
0

如果您正在扩展 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 表单中而不是在管理员中更改密码。

于 2013-07-25T02:45:23.040 回答