标签:att 选择 静态 ons 主题 字段排序 mode attrs you
INSTALLED_APPS=[...,‘crispy_forms‘,‘Xadmin‘,...]
pip3 install django-crispy-forms django-import-export django-reversion django formtools future httplib2 six xlwt xlsxwriter requests
python3 manage.py migrate
path(‘xadmin/‘, xadmin.site.urls)
注册模型类: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'格式写入
'''
在应用/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/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',...]
adminx.py
class LessonInline(object):
model = Lesson # 指明模型(表)
extra = 0 # 打开页面时默认不添加数据,无标签页
style = 'tab' # 标签页形式 最好注销不进行设置,避免出现bug
exclude = ['',''] # 隐藏字段
在模型管理器中添加属性 inlines=[LessonInline]
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,需要插件
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)
在管理器中添加属性
style_fields = {
"columnname":"ueditor"
}
在前端模版中显示:
因为保存时的数据结构时str,所以在html模版中需要显示字段的位置添加
{%autoescape off%}{{columnname}}{%endautoescape%},将str转换为html代码。
与添加ueditor相同
标签:att 选择 静态 ons 主题 字段排序 mode attrs you
原文地址:https://www.cnblogs.com/blueandsky/p/11946406.html