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

52

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

感谢您的帮助。

4个回答

87

我最终在我的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)

10
我们也可以扩展UserAdmin而不是动态修改它! - Natim
6
请将以下内容添加到您网站的顶级 admin.py 文件中,以澄清问题。 - Jamie Forrest
1
根据另一个答案中的@Carl Meyer所说,您需要注销。如果不注销,您该如何操作? - giancarloap
2
也许你缺少了 "from django.contrib import admin"? - Natim
1
@JamieForrest 在Django 2.1中,顶级admin.py文件不起作用。我把它放到了我的自己的应用程序(accounts.admin.py)中,然后它就可以工作了。不知道为什么,但无论如何它都可以工作。顺便说一句:https://docs.djangoproject.com/en/2.1/topics/auth/customizing/中有一个完整的示例。 - C.K.
显示剩余7条评论

24

另一种方法是扩展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'] - jdm
2
这应该是 CustomUserAdmin.list_display = 而不是 UserAdmin.list_display =,对吗? - Amichai Schreiber
@AmichaiSchreiber 我认为两种方法都可以,但我同意CustomUserAdmin.list_display = 是更清晰的解决方案。 - Erik Kalkoken

1
在 admin.py 文件中:
导入 UserAdmin。
from django.contrib.auth.admin import UserAdmin

放置您需要的字段:

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

那就这样!它与Django3一起工作。


或者您可以使用Django4将list_display扩展为其他字段: UserAdmin.list_display = list(UserAdmin.list_display) + ['is_active', 'date_joined'] - Domenico Spidy Tamburro

-3
假设您的用户类是 User,订阅日期字段是 subscription_date,那么您需要在 admin.py 中添加以下内容:
class UserAdmin(admin.ModelAdmin):
    list_display = ('subscription_date',)

admin.site.register(User, UserAdmin)

5
这应该从内置的UserAdmin继承,否则您将失去所有其他自定义内容。您还需要注销内置的注册; Natim的答案有正确的代码。 - Carl Meyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接