为Django admin更改用户ModelAdmin

Leo*_*eon 17 django django-admin

如何覆盖用户的管理模型?我认为这会起作用,但事实并非如此?

class UserAdmin(admin.ModelAdmin):
    list_display = ('email', 'first_name', 'last_name')
    list_filter = ('is_staff', 'is_superuser')

admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

我不打算覆盖模板,只需更改显示的字段和排序.

请问好吗?

Fel*_*ing 47

您必须先取消注册User:

class UserAdmin(admin.ModelAdmin):
    list_display = ('email', 'first_name', 'last_name')
    list_filter = ('is_staff', 'is_superuser')


admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

也许这个问题对您来说也很有趣:在Django中自定义管理表单,同时也使用自动发现

  • 扩展`ModelAdmin` 对我不起作用。我尝试从 `UserAdmin` 扩展然后我的 CustomUserAdmin 工作 (3认同)

End*_*zes 11

使用 Django 3+ 测试更新

因此您不会丢失密码加密和表单本身等数据,请执行下面的导入

from django.contrib.auth.admin import UserAdmin
Run Code Online (Sandbox Code Playgroud)

定义 AdminCustom 类作为示例,并使用所需的选项进行自定义,覆盖默认值。

class UserAdminCustom(UserAdmin):
   list_display = ('email', 'first_name', 'last_name', 'is_staff', 'is_superuser')
   list_filter = ('is_staff', 'is_superuser')
   search_fields = ('username', )
Run Code Online (Sandbox Code Playgroud)

最后,按照提到的例子进行操作

admin.site.unregister(User)
admin.site.register(User, UserAdminCustom)
Run Code Online (Sandbox Code Playgroud)