基本使用
1.各个app目录下创建adminx.py
2.创建ModelAdmin
class ModelInline(object):
model=Model
extra=0
class Model(object):
def get_course_lesson_num(self):
return self.lesson_set.all().count()
get_course_lesson_num.short_description="章节数"
def go_to(self):
from django.utils.safestring import mark_safe
return mark_safe("<a href='http://www.ioboom.com/'>跳转</a>")
go_to.short_description="跳转"
class ModelAdmin(object):
list_display = ['go_to','get_course_lesson_num'] #显示字段,也可以添加model的方法名
search_fields = [] #搜索字段
list_filter = ['lesson__name'] #过滤器字段 外键可以用__取值
model_icon="fa fa-address-book-o" #设置显示图标
ordering=['click_nums',''] #默认按字段排序
readonly_fields=['fav_nums'] #只读字段
list_editable=['degree','desc'] #直接可以在列表页进行编辑
refresh_times=[3,5] #设置页面自动刷新时间
exclude=['click_nums'] #不显示的字段
relfield_style='fk-ajax' #作为其他模型的外键字段时异步加载,搜索时才加载
inlines=[ModelInline] # 一个页面下管理有外键关系的多个模型
#重载queryset,过滤显示数据
#可以重新写一个模型(继承即可)进行admin注册,并设置在class Meta:中设置 proxy=True (不生成新表),进行一个模型的分类显示
def queryset(self):
qs=super(CourseAdmin,self).queryset()
return qs.filter(is_banner=False)
#重载保存方法
def save_models(self):
obj=self.new_obj #获取被保存的对象
obj.save()
3.注册
xadmin.site.register( Model, ModelAdmin)
别名设置
在app目录下的apps.py的中ModelConfig类中添加verbose_name的类变量,设置自定义别名,后台页面的侧边栏菜单就会显示中文
主题设置
使用
from xadmin import views
class BaseSetting(object):
enable_themes = True #使用主题
use_bootswatch = True #使用bootswatch主题
xadmin.site.register(views.BaseAdminView, BaseSetting) #注册
问题
在xadmin使用的过程中,设置“use_bootswatch = True”,企图调出主题菜单,显示更多主题。然而设置了后,发现主题还是默认和bootstrap2,深入跟踪源代码,发现/xadmin/plugins/themes.py下的
block_top_navmenu
当use_bootswatch 为True的时候,就会使用httplib2去
http://bootswatch.com/api/3.json网址获取主题菜单项。但是使用浏览器打开这个网址,http会被替换成https的。httplib2访问这个https的网址,就会报错。
这边使用requests库来替代httplib2.
1.安装requests
2.在./xadmin/plugins/themes.py 引入requests
3.修改block_top_navmenu方法:
def block_top_navmenu(self, context, nodes):
...
try:
flag = False #假如为True使用原来的代码,假如为Flase,使用requests库来访问
if flag:
h = httplib2.Http()
resp, content = h.request("http://bootswatch.com/api/3.json", 'GET', '',
headers={"Accept": "application/json", "User-Agent": self.request.META['HTTP_USER_AGENT']})
if six.PY3:
content = content.decode()
watch_themes = json.loads(content)['themes']
else:
content = requests.get("https://bootswatch.com/api/3.json")
if six.PY3:
content = content.text.decode()
watch_themes = json.loads(content.text)['themes']
ex_themes.extend([
{'name': t['name'], 'description': t['description'],
'css': t['cssMin'], 'thumbnail': t['thumbnail']}
for t in watch_themes])
except Exception as e:
print(e)
...
全局设置
from xadmin import views
class GlobalSettings(object):
site_title = "慕学后台管理系统" #title
site_footer = "慕学在线网" #页脚
menu_style = "accordion" #折叠菜单
xadmin.site.register(views.CommAdminView, GlobalSettings)