当前位置: 首页 > 工具软件 > django-xadmin > 使用案例 >

django---xadmin

后安民
2023-12-01

1、安装过程中你会发现在git上面提供的是pip install xadmin,而在对应的文档上面提供的是pip install django-xadmin
但是这两者对于python3.6而言,其实都是错误的,你需要使用的是: 
pip install git+git://github.com/sshwsfc/xadmin.git

最后pip会提示安装成功

2、但是你实际运行的时候又会发现,还缺少一个import_export的包 
所以继续 
pip install django-import-export

,安装成功以后,xadmin就算安装成功了。

3、然后在settings.py里面注册上
 


INSTALLED_APPS = (
    ...
    'xadmin',
    'crispy_forms',
    'reversion',
    ...

4、在项目下面的urls.py里面进行替换 


import xadmin
    # url(r'^admin/', admin.site.urls),
    url(r'^xadmin/', xadmin.site.urls),

5、在cmd中切到项目根目录下,运行:python manage.py makemigrations

6、5步骤后,继续运行:python manage.py migrate

7、然后在应用下写一个adminx.py文件,


import xadmin
xadmin.site.register(你的应用名)

xadmin的配置

其中需要注意的是search_fields中不要把时间字段加入,如果加了时间字段,在使用搜索功能的时候容易报错。

adminx.py中一般配置(即没有关联外键):

import xadmin
from .models import Course

class CourseAdmin(object):
    list_display = ['name','desc','detail','degree','learn_times','students']
    search_fields = ['name','desc','detail','degree','students']
    list_filter = ['name','desc','detail','degree','learn_times','students']

xadmin.site.register(Course,CourseAdmin)

adminx.py中(若关联外键):

mport xadmin
from .models import Lesson

class LessonAdmin(object):
    list_display = ['course','name','add_time']
    # 因为course是外键,过滤器需要指定详细的外键字段才能在前端正确显示并且使用
    search_fields = ['course__name','name']
    #因为course是外键,过滤器需要指定详细的外键字段才能在前端正确显示
    list_filter = ['course__name','name','add_time']

xadmin.site.register(Lesson,LessonAdmin)

xadmin主题配置

users/adminx.py中(应该任意一个app都可以)。

from xadmin import views

#额外的主题修改
class BaseSetting(object):
    enable_themes = True    #表示使用主题功能
    use_bootswatch = True
xadmin.site.register(views.BaseAdminView,BaseSetting)

.xadmin全局设置(标题,页脚,右侧导航栏等)

#全局设置
from xadmin import views

class GlobalSettings(object):
site_title = 'XMJsystem'    #Logo
site_footer = 'XMJ在线学习后台管理系统'   #网页页脚信息
menu_style = 'accordion'    #右侧导航栏折叠功能

修改app在前端中显示的名称

该app下的apps.py中:

from django.apps import AppConfig


class OperationConfig(AppConfig):
    name = 'operation'
    verbose_name = u'用户操作'
该app下的__init__.py中:

default_app_config = 'operation.apps.OperationConfig'

xadmin常用字段类型

# 数据展示
list_display = ['name','desc','detail','degree','learn_times','students','get_zj_nums','go_to']

# 查询
search_fields = ['name','desc','detail','degree','students']

# 筛选(后台管理页面中的过滤器)
list_filter = ['name','desc','detail','degree','learn_times','students']

# 自定义后台系统的icon
model_icon = 'fa fa-location-arrow'  #这是第三方字体库,用最新的版本需要替换对应js和fonts文件

# 后台自定义默认排序
ordering = ['-click_nums']

# 后台自定义字段只可读
# readonly_fields = ['click_nums','fav_nums']
readonly_fields = ['click_nums']

# 后台自定义字段不显示
exclude = ['fav_nums']   #这里会跟readonly_fields冲突,所以readonly_fields的fav_nums去掉了,

# 后台自定义不是下拉选择框,而是搜索框(解决了为什么用户不是下拉框的问题。。)
relfield_style = 'fk-ajax'

# 后台直接在表上修改数据
list_editable = ['degree','desc']

# xadmin/plugins/refresh插件定时刷新页面
refresh_times = [10,60]   # 后台可选择10秒刷新一次或者60秒刷新一次

Inline功能(如添加课程的时候直接添加课程下的章节和课程资源)

# 添加课程的时候外键关联该课程的数据直接添加编辑的设置
class LessonInline(object):
    model = Lesson
    extra = 0
# 添加课程的时候外键关联该课程的数据直接添加编辑的设置
class CourseResourceInline(object):
    model = CourseResource
    extra = 0

class CourseAdmin(object):
    inlines = [LessonInline,CourseResourceInline]

后台系统根据布尔值显示两张表(对同一个models注册为2个管理页面),方便看数据(没成功)

models.py中:

#后台系统根据布尔值BooleanField显示2张表
class BannerCourse(Course):
    class Meta:
        verbose_name = '轮播课程'
        verbose_name_plural = verbose_name
        
        #关键参数,有了这个参数后,不会多一张数据表
        proxy = True

 

xadmin.py中:

class BannerCourseAdmin(object):
    inlines = [LessonInline,CourseResourceInline]

    # 数据展示
    list_display = ['name','desc','detail','degree','learn_times','students']

    # 查询
    search_fields = ['name','desc','detail','degree','students']

    # 筛选(后台管理页面中的过滤器)
    list_filter = ['name','desc','detail','degree','learn_times','students']

    # 过滤取出的数据
    def queryset(self):
        qs = super(BannerCourseAdmin, self).queryset()    # 这条不起作用
        qs.filter(is_banner = True)
        return qs

xadmin.site.register(BannerCourse,BannerCourseAdmin)

后台管理显示通过models.py定义的def方法获得数据:

1.models.py:

#自定义获取章节数
def get_zj_nums(self):
    '''
    获取课程章节数
    '''
    all_lessons = self.course.all().count()
    return all_lessons
get_zj_nums.short_description = '章节数'   # 后台管理显示的title
2.xadmin.py中:
list_display = ['get_zj_nums']

.后台管理添加跳转链接(可自定义链接)

1.models.py中:

# 后台管理获得跳转链接
def go_to(self):
    from django.utils.safestring import mark_safe
    return mark_safe("<a href='http://www.baidu.com'>跳转</a>")
go_to.short_description = '跳转'   # 后台管理显示的title
2.xadmin.py中:
list_display = ['go_to']

后台在添加数据的时候,动态统计某些数据

# 跟下面一样没有成功
# def save_models(self):
#     # 在保存课程的时候统计课程机构的课程数
#     obj = self.new_obj
#     obj.save()
#     if obj.course_org is not None:
#         course_org = obj.course_org
#         course_org.course_nums = Course.objects.filter(course_org=course_org).count()
#         course_org.save()

 

 类似资料: