Django Xadmin配置与使用
Posted blueandsky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Xadmin配置与使用相关的知识,希望对你有一定的参考价值。
xadmin基础配置
- xadmin源码放在Django项目根目录;
- setting.py:
INSTALLED_APPS=[...,‘crispy_forms‘,‘Xadmin‘,...]
- 安装xadmin依赖包:
pip3 install django-crispy-forms django-import-export django-reversion django formtools future httplib2 six xlwt xlsxwriter requests
- 生成xadmin需要的表:
python3 manage.py migrate
- 配置访问地址:urls.py:
path(‘xadmin/‘, xadmin.site.urls)
xadmin配置列表、搜索和过滤
注册模型类:1.在应用中创建adminx.py;2.
xadmin.site.register(modlename1,modlename2,...)
设置应用在后台的名称:在应用中apps.py添加
verbose_name=‘appname‘
创建模型管理器:
class ModlenameAdmin(object): list_display=['colume1','colume2',...] # 显示的字段 search_fields=['colume1','colume2',...] # 搜索的字段 list_filter=['colume1','colume2',...] # 过滤的字段 list_editable=['colume1','colume2',...] # 在页面中直接编辑的字段 ''' 1.列表中可以是字段,也可以是方法名 2.如果表中含有外键,根据外键表的某个字段过滤则可以使用'tablename__column'格式写入 '''
xadmin全局配置
在应用/adminx.py
class GlobalSettings(object): site_title = "左上角文字" site_footer = "页面底部文字" menu_style = "accordion" # 折叠左侧标题栏 xadmin.site.register(xadmin.views.CommAdminView, GlobalSettings) class BaseSettings(object): enable_themes = True # 页面主题设置 use_bootswatch = True xadmin.site.register(xadmin.views.BaseAdminView, BaseSettings)
xadmin进阶配置
修改编辑页面布局
参考xadmin/plugins/auth.py:def get_form_layout(self)
模型管理器中添加:
def get_form_layout(self): if self.org_obj: # 判断是否是编辑页面 self.form_layout = ( Main( Fieldset("讲师信息", # 块名称 'teacher','course_org', css_class='unsort no_title' ), Fieldset("基本信息", 'name', 'desc', Row('learn_times', 'degree'), # 两个字段在一行 Row('category', 'tag'), 'youneed_know', 'teacher_tell', 'detail', ), ), # 在页面右侧显示 Side( Fieldset("访问信息", 'fav_nums', 'click_nums', 'students','add_time' ), ), Side( Fieldset("选择信息", 'is_banner', 'is_classics' ), ) ) return super(NewCourseAdmin, self).get_form_layout()
权限管理:批量管理用户权限----->组
根据用户权限过滤列表页数据:
模型管理器中添加:
def queryset(self): qs = super().queryset() # if not self.request.user.is_superuser: # 判断用户权限 qs = qs.filter(is_banner=True) return qs
控制保存和修改逻辑
在模型管理器中,重载def save_models()方法
def save_models(self): obj = self.new_obj # 获取编辑对象 if not obj.id: # 判断是新增页面还是编辑页面 obj.save() course = obj.course course.students += 1 course.save()
在xadmin的源码中,被@filter_hook装饰的方法都可以重载,参考xadmin/views/edit.py
多个管理器管理同一张表
新建model---->class Modelone(modelname)继承被操作的模型类;
class Modelone(Modelname): # 新的model 继承已有的模型类 class Meta: verbose_name = "xxx" verbose_name_plural = verbose_name proxy = True # 在migrate的时候不会生成新的表
创建ModelAdmin管理器,并注册
class ModeloneAdmin(object): # 新建管理器 pass class ModelAdmin(object): # 已有管理器 pass # 注册管理器 xadmin.site.register(Modelone, ModeloneAdmin) xadmin.site.register(Model, ModelAdmin)
列表页显示图片
在模型类中添加自定方法
def show_image(self): from django.utils.safestring import mark_safe return mark_safe("<img src='{}'>".format(self.image.url)) show_image.short_description = "图片" # 设置方法在列表页中的显示名称
可以用同样的方式添加其他自定义方法。
在模型管理器中,
list_display = [...,'show_image',...] # 添加到显示列表中
配置只读字段、排除字段和默认的排序
在模型管理器中添加以下内容
# !!!注意:某个字段不能同时存在于只读和隐藏中 # 只读字段 readonly_fields=['xx','xx',....] # 隐藏字段 exclude=['xx','xx',...] # 根据某个字段排序 ordering=['xx','xx',...]
通过models-icon修改xadmin后台中model图标
- 管理器中添加 model_icon=‘‘ fa fa-xxxx" xxxx是图标的名称
- 参考xadmin/static/xadmin/vendor/font-awesome (第三方图表库)
- 下载Font Awesome 替换xadmin自带图表库
- 复制中文官网图标名称,修改model_icon的值
inline配置多张表在同一页面编辑
adminx.py
class LessonInline(object): model = Lesson # 指明模型(表) extra = 0 # 打开页面时默认不添加数据,无标签页 style = 'tab' # 标签页形式 最好注销不进行设置,避免出现bug exclude = ['',''] # 隐藏字段
在模型管理器中添加属性 inlines=[LessonInline]
ueditor富文本编辑器
DjangoUeditor源码放在项目根目录;
配置setting.py
INSTALLED_APPS = [ ... 'DjangoUeditor', ... ]
配置urls.py
urlpatterns = [ ... #配置富文本相关的url url(r'^ueditor/',include('DjangoUeditor.urls' )), ]
在models中使用
需要使用编辑器的字段修改为:(部分参数参考github)
xxx = UEditorField(verbose_name="xx", width=600, height=300, imagePath="courses/ueditor/images/", filePath="courses/ueditor/files/", default="")
xadmin不支持ueditor,需要插件
- 插件拷贝---->xadmin/plugins/(使用下面内容新建ueditor.py)
import xadmin from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView from DjangoUeditor.models import UEditorField from DjangoUeditor.widgets import UEditorWidget from django.conf import settings class XadminUEditorWidget(UEditorWidget): def __init__(self,**kwargs): self.ueditor_options=kwargs self.Media.js = None super(XadminUEditorWidget,self).__init__(kwargs) class UeditorPlugin(BaseAdminPlugin): def get_field_style(self, attrs, db_field, style, **kwargs): if style == 'ueditor': if isinstance(db_field, UEditorField): widget = db_field.formfield().widget param = {} param.update(widget.ueditor_settings) param.update(widget.attrs) return {'widget': XadminUEditorWidget(**param)} return attrs def block_extrahead(self, context, nodes): js = '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.config.js") #自己的静态目录 js += '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js") #自己的静态目录 nodes.append(js) xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView) xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
- /xadmin/plugins/init.py中PLUGINS中添加文件名称
在管理器中添加属性
style_fields = { "columnname":"ueditor" }
在前端模版中显示:
因为保存时的数据结构时str,所以在html模版中需要显示字段的位置添加
{%autoescape off%}{{columnname}}{%endautoescape%},将str转换为html代码。
数据的导入和导出配置
与添加ueditor相同
- /xadmin/plugins/importexport.py
- /xadmin/plugins/init.py中PLUGINS中添加该文件名称,注销export,避免重复。
以上是关于Django Xadmin配置与使用的主要内容,如果未能解决你的问题,请参考以下文章
第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示