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

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

感谢您的帮助

【问题讨论】:

    标签: python django django-admin django-users


    【解决方案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 的答案是正确的代码。
      猜你喜欢
      • 2014-11-18
      • 2016-05-04
      • 2020-10-02
      • 1970-01-01
      • 2021-05-07
      • 2023-03-16
      • 2018-10-27
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多