Django 自定义管理员的 User 页面
2018-09-20 本文已影响15人
思考的虫子
Django 2.1
自定义User 列表页面 的显示项目
- 进入某个App的 admin.py, 我选自己建的Accounts App, 我在这里建立了 UserProfile model
- 编辑
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 详情页面添加 Profile 信息
- 在上一步基础上,导入自己的Profile model
- 定义 Inline Class
- 在自定义的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)