如何在 Django CRUD 中自定义 auth.User 管理页面?

Posted

技术标签:

【中文标题】如何在 Django CRUD 中自定义 auth.User 管理页面?【英文标题】:How to customize the auth.User Admin page in Django CRUD? 【发布时间】:2011-01-17 06:02:27 【问题描述】:

我只想在 Django CRUD 管理站点的用户列表中添加订阅日期。 我该怎么做?

感谢您的帮助

【问题讨论】:

【参考方案1】:

我终于在我的 admin.py 文件中这样做了:

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

UserAdmin.list_display = ('email', 'first_name', 'last_name', 'is_active', 'date_joined', 'is_staff')

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

【讨论】:

我们也可以扩展 UserAdmin 而不是动态修改它! 澄清一下,这应该添加到您网站的*** admin.py 文件中。 请问你说的***是什么意思? 这意味着你应该在你的Django项目的根目录下创建一个admin.py文件(与你的wsgi.py或settings.py文件在同一级别) 也许你错过了from django.contrib import admin【参考方案2】:

另一种方法是扩展 UserAdmin 类。

你也可以创建一个函数放在list_display上

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class CustomUserAdmin(UserAdmin):
    def __init__(self, *args, **kwargs):
        super(UserAdmin,self).__init__(*args, **kwargs)
        UserAdmin.list_display = list(UserAdmin.list_display) + ['date_joined', 'some_function']

    # Function to count objects of each user from another Model (where user is FK)
    def some_function(self, obj):
        return obj.another_model_set.count()


admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

【讨论】:

我也可以这样做(没有__init__),还是有问题? class CustomUserAdmin(UserAdmin): list_display = list(UserAdmin.list_display) + ['date_joined'] 不应该是CustomUserAdmin.list_display = .. 而不是UserAdmin.list_display = 吗? @AmichaiSchreiber 我认为两者都有效,但我同意CustomUserAdmin.list_display = 是更清洁的解决方案【参考方案3】:

在 admin.py 中

导入用户管理员

from django.contrib.auth.admin import UserAdmin

输入你需要的字段:

UserAdmin.list_display = ('email','is_active')  # Put what you need

就是这样!它适用于 Django3

【讨论】:

【参考方案4】:

假设您的用户类别为User,订阅日期字段为subscription_date,这就是您需要在admin.py 中添加的内容

class UserAdmin(admin.ModelAdmin):
    list_display = ('subscription_date',)

admin.site.register(User, UserAdmin)

【讨论】:

这应该继承自内置的 UserAdmin,否则您将丢失所有其余的自定义设置。而且您也必须取消注册内置注册; Natim 的答案是正确的代码。

以上是关于如何在 Django CRUD 中自定义 auth.User 管理页面?的主要内容,如果未能解决你的问题,请参考以下文章

python/django models中自定义用户认证及django admin自定义

python/django models中自定义用户认证及django admin自定义

如何在 django 中自定义找不到页面(404)?

如何在 Django 中自定义单选按钮

如何在 Django 1.7 中自定义管理页面?

如何在 django 1.5 中自定义用户模型