• 三、xadmin----内置插件


    1、Action

      Xadmin 默认启用了批量删除的事件,代码见xadmin-->plugins-->action.py  DeleteSelectedAction

      如果要为list列表添加其他事件,可自定义Action:

      1)自定义一个Action类,继承BasicActiveView

        from xadmin.plugins.actions import BasicActiveView

        class MyAction(BasicActiveView):

          """

            这里有必要三个属性:

              1)action_name="my_action name" # 相当于这个动作的唯一标识,尽量用比较有针对性的名字

              2)description = _(u'Test selected %(verbose_name_plural)s') # 描述,出现在Action菜单中,可以使用 '%(verbose_name_plural)s' 代替Model的名字

              3)model_perm ='change' # 该Action所需要的权限

          """

      2)实现do_action方法

        def do_action(self, queryset):

          # queryset 是包含了已经选择的数据的queryset

          for obj in queryset:

            # 对obj的操作

            ....

            return HttpResponse(...)

      3)将自定义的Action添加到 ActionPlugin 中

        xadmin.plugins.__init__.py中的 PLUGINS =(MyAction,)

         4) 在需要使用插件的modelAdmin中

        actions = ["MyActions",]

    2、数据过滤 Data filters

       1)xadmin默认已经添加了模糊搜索,范围搜索和日期范围搜索

      使用方法:

        通过在Model对应的Xdamin中添加以下属性:

        1)list_filter属性:

          这个属性可以指定可以过滤的列名,然后系统会自动生成一个搜索器

        2)search_fields:

          这个属性指定可以通过搜索框搜索的数据列的名字,搜索框搜索使用的是模糊查找的方式

        3)free_query_filter:

          默认为True,指定是否允许免费搜索,如果允许,用户可以通过url指定参数来自定义搜索

    class postsAdmin(object):
        list_display = ["navi_f", "navi_s", "author", "title",  "add_time", "is_recommend", "is_essence", "is_auth", "is_approval", "is_commit"]  # 指定展示的字段
        inField = "forum"  # 用于分组
        is_execute = True  # 是否启用自定义插件,二级联动查询
        list_filter = ["is_auth","is_recommend", "is_essence","navi_f", "navi_s", "author", "is_approval"]  # 过滤字段
        search_fields = ["title"]  # 搜索字段
        list_editable = ["is_approval"]  # 可编辑字段
    
        actions = ["linkage_filter",]  # 自定义插件

      2)自定义过滤器

        参考 xadmin.filter.py

        自定义过滤器 需要继承 BaseFilter

        并通过xadmin.filter.manage来注册或者通过@manager.register装饰器注册

    3、图表插件

        在数据列表界面,根据列表数据生成图表,可以指定多个数据列生成多个图表

        在mode OptionClass(xadmin.py)中设定data_chars属性,该属性为dict类型,key是图表的标志名称,value是图表的具体设置属性

        如:

          class ReportCharAdmin(object):

            list_display = ["year","data"]

            list_per_page = 20

            data_charts = {

              "user_count":{"title":u"data charts", "x-field":"year", "y-field":("data",), "order":("year",)}

            }

        参数说明:

          title:图表的显示名称

          x-field:图表的x轴数据列,一般是时间,日期等

          y-field:图表的y轴数据列,该项是一个list,可以同时设置多个值,会在同一个列表中显示多条曲线

          order:排序信息,如果不写则使用数据列表的顺序

      源码参见 xadmin.plugins.chart.ChartsPlugin(BaseAdminPlugin)

           xadmin.plugins.chart.ChartsView(ListAdminView)

    4、数据导出

      默认可以导出格式:Excel,CSV, XML 和 Json,如果想要导出Excel,需要安装xlwt

      可以通过在Model OptionClass中设置list_export来指定导出格式,或者设置None禁用导出功能

        class UserAdmin(object):

          list_export = ('xls', "xml", "json")

          可以通过设置list_export_fields来指定导出列

          list_export_fields = ('id', "title", "status", "create_time")

    5、List界面自动定时刷新

      要启用自动刷新功能,只需要简单在Model OptionClass中设置refresh_times即可

       class UserAdmin(object):

          refresh_times = (3,5) #用户可以选择三秒或者5秒刷新一次

    6、展示详情

      此插件可以在List列表界面显示相关字段的详细信息,通过Ajax实现

      使用:

        通过在Model OptionClass中设置 show_detail_fields属性来指明需要在哪些字段上显示详情

        class UserAdmin(object):

          show_detail_fields = ["name", "age"]

    7、即时编辑数据

      此插件使用Ajax立即修改某些字段的值,对于一些经常需要修改的字段,如状态等 非常有用

      此插件可以通过OptionClass的list_editable属性设置,‘list_editable’是一个列表,用来指定可以编辑的字段

      class UserAdmin(object):

        list_editable = ["name", "age"]

    8、设置readonly只读

      class UserAdmin(object):

        # 因为只是单纯的设置readonly_fields属性的话,会同时限定了普通用户和超级用户,但是很多时候我们并不希望限制超级用户,所有重定义get_readonly_fields函数

        def get_readonly_fields(self):

          if self.user.is_superuser:

            self.readonly_fields = []

          return self.readonly_fields

        readonly_fields = ("username", "age")

      

    9、书签

      在Model OptionClass中设置如下属性:

        show_bookmarks = True # 默认值就为True

        list_bookmarks # 用户可以在List列表自行添加书签,也可以预先设置书签,预先设置书签如下:

          list_bookmarks = [{

            "title":"Femal", # 书签的名字

            "query":{"gender":True}, # 过滤参数,是标准的queryset过滤

            "order":("-age"), #排序参数

            "cols":("firstname", "age", "phones"),  # 显示的列

            "search":'Tom', #搜索参数,指定搜索的内容

          },{...}

          ]

  • 相关阅读:
    XML HTML CSS JS的区别整理
    Python的作用域
    python文件操作总结
    python的open文件操作
    python使用struct处理二进制
    webstorm
    vue-cli项目中,配合element_ui来实现上传图片与视频到oss上。
    vue-cli项目中如何实现局部页面的刷新?
    基于cropper图片裁剪,兼容PC端与移动端
    跨域的完全讲解
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/9431628.html
Copyright © 2020-2023  润新知