Django自定義Admin的用戶管理頁面


通常默認admin中User管理列表和編輯頁面都不和心意,我們需要進行定制化操作。

在admins.py中增加以下代碼,讓用戶列表顯示更多內容。

from django.contrib import admin
 # 1. 導入默認UserAdmin 作為Base Class
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User

# 2.  Define a new User admin
class UserAdmin(BaseUserAdmin):
    # 3. 重新定義 list_display
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_active', 'date_joined', 'is_staff') 

# 4. 注銷 User
admin.site.unregister(User)
# 5. 重新注冊 User
admin.site.register(User, UserAdmin)

如果你的User模型關聯了其他屬性表,比如UserProfile,又希望在同一個頁面進行管理,辦法如下:

  1. 在上一步基礎上,導入自己的Profile model
  2. 定義 Inline Class
  3. 在自定義的UserAdmin中加入Inline信息
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from accounts.models import UserProfile


class UserProfileAdmin(admin.ModelAdmin):
    list_display = ['user', 'phone_number', 'gender', 'date_of_birth', 'address', 'suburb', 'city', 'post_code']


# Define an inline admin descriptor for Employee model
# which acts a bit like a singleton
class EmployeeInline(admin.StackedInline):
    model = UserProfile
    can_delete = False
    verbose_name_plural = 'profile'


# Define a new User admin
class UserAdmin(BaseUserAdmin):
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_active', 'date_joined', 'is_staff')
    inlines = (EmployeeInline,)


# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
admin.site.register(UserProfile, UserProfileAdmin)

參考文檔:
https://www.jianshu.com/p/0a34918160ab


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM