python-Django项目实战-Admin后台管理

156 阅读3分钟

超级用户

这样强大的功能,使用前我们先创建一个超级用户

$ python manage.py createsuperuser

依次输入用户名(123456789)、邮箱(12345678@qq.com)、密码(00000000) 创建后在网址输入账号密码:http://127.0.0.1:8000/admin/

Admin后台管理

在前面的章节中,我们已经完成网站页面的基本开发,接下来讲述网站的Admin后台系统开发。Admin后台系统主要方便网站管理员管理网站的数据和网站用户。由于项目应用index和user分别定义了模型Label、Song、Dynamic、Comment和MyUser,并且index和user是两个独立的项目应用,因此在Admin后台系统中需要区分两个功能模块。

下一步为每个模型设置相应的ModelAdmin,在Admin后台系统中设置每个模型的数据操作功能,分别在index和user的admin.py中编写以下代码:

index的admin.py

from django.contrib import admin
from .models import *
​
@admin.register(Label)
class LabelAdmin(admin.ModelAdmin):
    # 设置模型字段,用于Admin后台数据的列名设置
    list_display = ['id', 'name']
    # 设置可搜索的字段并在Admin后台数据生成搜索框
    # 如有外键应使用双下划线连接两个模型的字段
    search_fields = ['name']
    # 设置排序方式
    ordering = ['id']
​
​
@admin.register(Song)
class SongAdmin(admin.ModelAdmin):
    # 设置模型字段,用于Admin后台数据的列名设置
    list_display = ['id', 'name', 'singer', 'album', 'languages', 'release', 'img', 'lyrics', 'file']
    # 设置可搜索的字段并在Admin后台数据生成搜索框
    # 如有外键应使用双下划线连接两个模型的字段
    search_fields = ['name', 'singer', 'album', 'languages']
    # 设置过滤器,在后台数据的右侧生成导航栏
    # 如有外键应使用双下划线连接两个模型的字段
    list_filter = ['singer', 'album', 'languages']
    # 设置排序方式
    ordering = ['id']
​
​
@admin.register(Dynamic)
class DynamicAdmin(admin.ModelAdmin):
    # 设置模型字段,用于Admin后台数据的列名设置
    list_display = ['id', 'song', 'plays', 'search', 'download']
    # 设置可搜索的字段并在Admin后台数据生成搜索框
    # 如有外键应使用双下划线连接两个模型的字段
    search_fields = ['song']
    # 设置过滤器,在后台数据的右侧生成导航栏
    # 如有外键应使用双下划线连接两个模型的字段
    list_filter = ['plays', 'search', 'download']
    # 设置排序方式
    ordering = ['id']
​
​
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
    # 设置模型字段,用于Admin后台数据的列名设置
    list_display = ['id', 'text', 'user', 'song', 'date']
    # 设置可搜索的字段并在Admin后台数据生成搜索框
    # 如有外键应使用双下划线连接两个模型的字段
    search_fields = ['user', 'song', 'date']
    # 设置过滤器,在后台数据的右侧生成导航栏
    # 如有外键应使用双下划线连接两个模型的字段
    list_filter = ['song', 'date']
    # 设置排序方式
    ordering = ['id']

user的admin.py

from django.contrib import admin
from .models import MyUser
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy as _
​
​
@admin.register(MyUser)
class MyUserAdmin(UserAdmin):
    list_display = ['username', 'email', 'mobile', 'qq', 'wechat']
    # 在用户修改页面添加'mobile','qq','weChat'
    # 将源码的UserAdmin.fieldsets转换成列表格式
    fieldsets = list(UserAdmin.fieldsets)
    # 重写UserAdmin的fieldsets,添加'mobile','qq','weChat'
    fieldsets[1] = (_('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'mobile', 'qq', 'wechat')})

在上述代码中,LabelAdmin、SongAdmin、DynamicAdmin和CommentAdmin设置了属性list_display、search_fields、list_filter和ordering;而MyUserAdmin设置了属性list_display和fieldsets,并且重写fieldsets。

由于模型MyUser继承内置模型User,因此将MyUserAdmin继承UserAdmin即可使用内置模型User在Admin后台系统的功能,并且通过重写方式将模型MyUser的新增字段添加到Admin后台系统中。