【Django】使用xadmin构建后台管理系统
1 配置xadmin
-
在github搜索xadmin并下载源码
由于xadmin报错实在是太多了,我前前后后改了三十多个报错,查阅了数百篇博客以及文献。为了以后不去重复处理报错,我fork了原来的xadmin项目,新建了自己的xadmin版本:MyXadmin,因此我建议你使用该仓库的xadmin版本。
-
在setting的INSTALLED_APPS中添加crispy_forms、xadmin、reversion、crispy_bootstrap3和django.conf,并配置语言和时区。
这里之所以要添加crispy_bootstrap3和django.conf配置,是为了避免之后的报错。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'apps.users.apps.UsersConfig', 'apps.courses.apps.CoursesConfig', 'apps.operations.apps.OperationsConfig', 'apps.organizations.apps.OrganizationsConfig', 'crispy_forms', 'xadmin.apps.XAdminConfig', 'reversion', 'crispy_bootstrap3', 'django.conf', ] CRISPY_TEMPLATE_PACK = 'bootstrap3' LANGUAGE_CODE = 'zh-hans' # 配置显示为中文 TIME_ZONE = 'Asia/Shanghai' # 配置时区 USE_TZ = False
-
安装xadmin的依赖
pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
-
生成数据表
makemigrations migrate
-
配置urls.py
使用xadmin替代admin构建后台管理系统。
from django.contrib import admin from xadmin.plugins import xversion from django.urls import path import xadmin xversion.register_models() xadmin.autodiscover() urlpatterns = [ # path('admin/', admin.site.urls), path('xadmin/', xadmin.site.urls), ]
2 注入数据表
-
在app目录下新建adminx.py文件,并编辑如下:
import xadmin from apps.courses.models import City class CourseAdmin(object): """ 为每个需要注入的数据表创建Admin函数 """ list_display = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students'] # 定义列表页显示的字段 search_fields = ['name', 'desc', 'detail', 'degree', 'students'] # 定义搜索的字段 list_filter = ['name', 'teacher__name', 'desc', 'detail', 'degree', 'learn_times', 'students'] # 定义过滤器字段('外键__外键属性':这种格式可以直接定位到外键属性) list_editable = ["degree", "desc"] # 定义允许在列表中直接编辑的字段 xadmin.site.register(Course, CourseAdmin) # 注册数据表
-
修改在xadmin网页中显示的该app名称(编辑app目录下的apps.py)
from django.apps import AppConfig class CoursesConfig(AppConfig): name = 'apps.courses' verbose_name = "课程管理" # 别称
3 配置后台管理系统样式
class GlobalSettings(object):
site_title = "CW后台管理系统" # 定义后台系统主题名称
site_footer = "CW网站页脚" # 定义后台系统网站页脚
menu_style = "accordion" # 左侧导航栏收起
class BaseSettings(object):
enable_themes = True # 允许更换主题皮肤配置
use_bootswatch = True
xadmin.site.register(xadmin.views.CommAdminView, GlobalSettings)
xadmin.site.register(xadmin.views.BaseAdminView, BaseSettings)