django + xadmin 配置后台

一、配置主题功能

在任意一个应用下的新建 adminx.py 文件, 添加如下配置

#-*- coding:utf-8 -*-
import xadmin
from xadmin import views

class BaseSetting(object):
    enable_themes = True
    use_bootswatch = True

xadmin.site.register(views.BaseAdminView, BaseSetting)

效果图:
主题样式

二、页眉页脚配置注册

在任意一个应用下的新建 adminx.py 文件, 添加如下配置

#-*- coding:utf-8 -*-
import xadmin
from xadmin import views

class GlobalSetting(object):
    site_title = '日志后台管理'         #头部导航
    site_footer = '日志后台管理'        #底部版权内容
    menu_style = 'accordion'           #左侧导航折叠框

xadmin.site.register(views.CommAdminView, GlobalSetting)

效果图:
在这里插入图片描述

三、定义modle类注册到后台管理界面

1、model.py 文件内容

from django.db import models


class MBGLogData(models.Model):
    '''报警信息表'''
    alarmodule = models.CharField(max_length=32,verbose_name='报警模块',blank=True)
    content = models.TextField(verbose_name='报警内容',blank=True)
    createtime = models.DateTimeField(verbose_name='报警时间',editable=False)
    dealman = models.ForeignKey(UserProfile,on_delete=models.CASCADE,verbose_name='处理人',blank=True,null=True)
    alarmreason = models.TextField(verbose_name='报警原因',blank=True,null=True)
    updatetime = models.DateTimeField(verbose_name='处理时间',auto_now=True)
    status = models.CharField(max_length=32,verbose_name='处理后的状态',default='未处理')
    
    def __str__(self):
        return self.alarmodule
        
    class Meta:
        verbose_name ="未处理日志报警"
        verbose_name_plural = verbose_name
  
class MBGDealLogData(MBGLogData):
    class Meta:
        verbose_name ="已处理日志报警"
        verbose_name_plural = verbose_name
        proxy = True        #不会在新增新的表

2、在相关应用app文件夹中新建adminx.py 文件,并在其内进行相关设置

#-*- coding:utf-8 -*-
import xadmin
from xadmin import views
from app.models import MBGLogData

#这个测试暂时
# class UserInline(object):
#     model = UserProfile
#     extra = 0

class LogAdmin(object):
    list_display = ['alarmodule','createtime','content','dealman','status']
    # list_filter = ['createTime','alarmodule','dealman','status']   #过滤
    search_fields = ['stauts','dealman']        #按照xx字段搜索
    # list_editable = ['dealman']
    readonly = ['alarmodule','createtime','content']    #只读
    readonly_fields = ['content']               #只读的列
    exclude = ['updatetime']           #点击详情页面不显示的列,注意和readonly_fields设置不要冲突
    ordering = ['-createtime']    #createtime倒叙排列
    relfield = 'fk-userprofile'    #外键关联的列,fk是ForeignKey简写
    # inlines = [UserInline]    #在详情页面可以添加用户的表
    list_per_page = 30
    model_icon = 'fa fa-bolt'     #样式地址:http://fontawesome.dashgame.com/
    
    def queryset(self):
        qs = super(LogAdmin, self).queryset()
        qs = qs.filter(status='未处理')
        return qs


class LogDealAdmin(object):
    list_display = ['alarmodule', 'createtime', 'content', 'dealman', 'status']
    search_fields = ['alarmodule','responsibilityman', 'dealman', 'status']
    readonly_fields = ['alarmodule', 'createtime', 'content', 'dealman', 'status']
    list_per_page = 30
    model_icon = 'fa fa-star'
    
    def queryset(self):
        qs = super(LogDealAdmin, self).queryset()
        qs = qs.exclude(status='未处理')
        return qs


xadmin.site.register(MBGLogData,LogAdmin)
xadmin.site.register(MBGDealLogData,LogDealAdmin)

3、定义app显示名称
①在app应用下有个apps.py 文件

class AppConfig(AppConfig):
    name = 'app'
    verbose_name = '日志管理平台'    #配置上着字段即可

②setting.py文件配置

INSTALLED_APPS = [
    ....
    'app.apps.AppConfig',
]

③可选配置
如果在第②部INSTALLED_APPS 中填写的是 app
那么需要在app应用目录中的 __init__.py 中进行相关设置

default_app_config = 'app.apps.AppConfig' # '应用名.apps.(apps.py中的相关Config名称)'

4、效果图:
在这里插入图片描述

四、遇到的问题

1、执行 python manage.py makemigrations 的时候报以下问题

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3

解决方法:

进入到python安装目录下的 Lib\site-packages\django\db\backends\mysql 目录下,
打开 base.py,注释掉(35、36行)内容:        
#if version < (1, 3, 13):
#    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

打开 operations.py 文件,将146行的decocde改为encode
if query is not None:
    query = query.encode(errors='replace')

2、在xadmin后台添加插件报以下问题

render() got an unexpected keyword argument ‘renderer’

解决办法:

进入到python安装目录下的 Lib\site-packages\django\forms 目录下,
打开 boundfield.py,注释掉 93行:    
return widget.render(
	name=self.html_initial_name if only_initial else self.html_name,
	value=self.value(),
	attrs=attrs,
	#renderer=self.form.renderer,
)
发布了319 篇原创文章 · 获赞 140 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/m0_37886429/article/details/103365202