xadmin安装,可以选用直接copy源码,将这个目录设置成根搜索路径
在settings中的installed_app增加xadmin和crispy_forms。
urls中xadmin替换admin。import xadmin
数据库同步
在创建的app下增加adminx.py文件,django会自动寻找这个文件。
adminx:
与admin编写相似:
基本上的属性有筛选search_fields ,过滤list_filter,显示list_display 。
import xadmin
from .models import EmailVerifyRecord
class EmailVerifyRecordAdmin(object):
list_display = ['code', 'email', 'send_type', 'send_time']
search_fields = ['code', 'email', 'send_type']
list_filter = ['code', 'email', 'send_type', 'send_time']
xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
使用主题:
from xadmin import views
class BaseSetting(object):
enable_themes = True
use_bootswatch = True
xadmin.site.register(views.BaseAdminView,BaseSetting)
设置页头和页脚和左侧多表收缩:
class GlobalSettings(object):
site_title = 'title'
site_footer = 'footer'
···menu_style = "accordion"
xadmin.site.register(views.CommAdminView,GlobalSettings)
修改app的名称在xadmin中显示
每个app都有app.py文件,在config类中增加verbose_name=‘appname’.
__init__.py文件,在其中导入设置的config类:default_app_config = 'users.apps.UsersConfig'
icon:
adminx:
EmailVerifyRecordAdmin类中增加:model_icon = 'fa fa-address-book-o'
这个icon的文件放在font-awesome中,下载的icon文件直接替换掉这个文件。
一个model注册成2个管理器
models中:
class course(models.Model):
....
class BannerCourse(Course):
class Meta:
verbose_name = 'bannercourse'
verbose_name_plural = verbose_name
proxy = True
adminx:
class CourseAdmin(object):
...
def queryset(self):
qs = super(CourseAdmin, self).queryset()
qs = qs.filter(is_banner=False)
return qs
class BannerAdmin(object):
...
def queryset(self):
qs = super(CourseAdmin, self).queryset()
qs = qs.filter(is_banner=True)
return qs
xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(BannerCourse, BannerCourseAdmin)
queryset方法是用于区分一个表中的不同数据,如果不设置,xadmin中显示banner和course的数据是完全一样的。
管理器嵌套,只能一层嵌套
假设lesson是course的外键
class LessonInline(object):
model = Lesson
extra = 0
class CourseAdmin(object):
...
inlines = [LessonInline]