django xadmin 插件(2) 列表视图新增一功能列

以默认的related_link为例(即最后一列)。

源码:xadmin.plugins.relate.RelatedMenuPlugin  

class RelateMenuPlugin(BaseAdminPlugin):

    use_related_menu = True

    # ...若干删减

    def related_link(self, instance):
        #... 若干删减
        return ‘<div class="dropdown related_menu pull-right"><a title="%s" class="relate_menu dropdown-toggle" data-toggle="dropdown"><i class="icon fa fa-list"></i></a>%s</div>‘ % (_(‘Related Objects‘), ul_html)

    related_link.short_description = ‘&nbsp;‘
    related_link.allow_tags = True
    related_link.allow_export = False
    related_link.is_column = False

    def get_list_display(self, list_display):
        if self.use_related_menu and len(self.get_related_list()):
            list_display.append(‘related_link‘)
            self.admin_view.related_link = self.related_link
        return list_display

注解:

1. 重写了ListAdminView的get_list_display方法(控制哪些字段加载)。

2. 此处增加的字段是实际数据模型不存在的字段,否则无效。详细看xadmin.util中的lookup_field方法(需要触发字段不存在的异常,进入对应名称的同名方法调用并采用其返回值),源码如下:

def lookup_field(name, obj, model_admin=None):
    opts = obj._meta
    try:
        f = opts.get_field(name)
    except models.FieldDoesNotExist:
        # For non-field values, the value is either a method, property or
        # returned via a callable.
        if callable(name):
            attr = name
            value = attr(obj)
        elif (model_admin is not None and hasattr(model_admin, name) and
              not name == ‘__str__‘ and not name == ‘__unicode__‘):
            attr = getattr(model_admin, name)
            value = attr(obj)
        else:
            attr = getattr(obj, name)
            if callable(attr):
                value = attr()
            else:
                value = attr
        f = None
    else:
        attr = None
        value = getattr(obj, name)
    return f, attr, value

3. 字段的渲染逻辑需要自行实现,此处是 related_link方法, 最终返回html代码。

4. 自定义字段的html代码能正常解析,不被和谐,不许要设置方法的allow_tags属性。

related_link.allow_tags = True

5. 栏位的名称,通过方法的short_description控制。

related_link.short_description = ‘&nbsp;‘

6. (待分析)很神奇的,该插件没有init_request方法,却能通过 use_related_menu属性控制插件是否加载。

新增字段默认返回html代码,要想其不被和谐, 方法的allow_tags属性需要为True,如下

related_link.allow_tags = True

  

最终效果,就是在列表后追加了一列,如下:

转载请注明来源:http://www.cnblogs.com/Tommy-Yu/p/5417987.html

谢谢!

时间: 2024-08-29 22:55:12

django xadmin 插件(2) 列表视图新增一功能列的相关文章

django xadmin 插件(3) 列表视图新增自定义按钮

效果图: 编辑按钮是默认的list_editable属性对应的插件(xadmin.plugins.editable) 放大按钮对应的是自定义插件. 自定义按钮源码: xplugin.py(保证能够直接或者间接被adminx.py引用到即可) # -*- coding:utf-8 -*- import xadmin from xadmin.views import BaseAdminPlugin, ListAdminView from xadmin.views.edit import ModelF

后台管理,给列表页新增查询功能,所遇到的问题及感想

1.需求. 1.添加一个下拉框做查询2.列表前面新增复选框点击后获取对应的id所对应的行的某一列数据之和(点击第二个累加),可全选 2.部分代码 操作区域: <table> <tr> <td> 批次:<select id="batch"> @foreach (var item in Model.BatchList) { <option value="@item">@item</option> }

django xadmin 插件(1)

1. 插件的作用可以是全局的,也可以是只针对某个模型的.通过其 init_request控制是否加载此插件, demo如下: class SCPCardOverviewPlugin(BaseAdminPlugin): pool_overview=False#默认不加载此插件 def init_request(self, *args, **kwargs): return bool(self.pool_overview) xadmin.site.register_plugin(SCPCardOver

列表视图控件

设计登陆窗口 首先创建一个图像列表,并通过SetImageList方法将列表视图控件和图像列表关联到一起. CImageList* SetImageList(CImageList* pImageList,int nImageList); pImageList:标识图像列表指针. nImageList:标识图像列表类型. LVSIL_NORMAL:图像列表具有大图标 LVSIL_SMALL:图像列表具有小图标 LVSIL_STATE:图像列表具有状态图标 然后调用InsertItem方法向列表视图

第三百九十六节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说

第三百九十六节,Django+Xadmin打造上线标准的在线教育平台-其他插件使用说 设置后台列表页面字段统计 在当前APP里的adminx.py文件里的数据表管理器里设置 aggregate_fields = {'字段名称':'sum为统计数,min为统计时间'} class CourseAdmin(object): # 自定义数据表管理器类 # 设置xadmin后台显示字段 list_display = ['name', 'desc', 'detail', 'degree', 'learn_

WorldWind源码剖析系列:插件列表视图类PluginListView和插件列表视图项类PluginListItem

WorldWind中的插件类是个庞大的类,可以说从软件设计层面上统筹可扩展的插件体系的设计思想是WorldWind中的精华,值得学习和借鉴.插件体系中的所用到的类可以分为两大类,一类是插件类Plugin及其派生类,另外一类是插件类中的界面类,如PluginDialog.PluginInstallDialog.插件列表视图类PluginListView和插件列表视图项类PluginListItem等.这些类之间的关联关系图如下所示.本节主要介绍插件类中的界面类. 插件列表视图类PluginList

第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页

第三百八十九节,Django+Xadmin打造上线标准的在线教育平台-列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值,传入逻辑处理就行数据库条件查询,将查询条件值在返回html页面判断是否是选中样式,最后将所有需要关联的筛选请求加上彼此逻辑处理传回来的查询条件值 html请求传参 黄色背景为请求传参 红色背景为逻辑处理传过来的查询条件判断样式 <div class="wp butler_list_box li

第三百九十七节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,主题本地化设置

第三百九十七节,Django+Xadmin打造上线标准的在线教育平台-其他插件使用说,主题本地化设置 主题设置是在xadmin\plugins\themes.py这个文件 默认xadmin是通过下面这个json文件来动态加载的.所以我们可以到它加载的json文件里下载好主题 themes.py修改方式 #coding:utf-8 from __future__ import print_function import httplib2 from django.template import lo

Sharepoint 2013列表视图和字段权限扩展插件!

记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有没有这方面的列表权限扩展插件?我告诉他Sharepoint 2010的列表权限扩展插件并不能在Sharepoint 2013中使用,不能向上兼容的,且Sharepoint 2013的功能也有所升级了,系统底层架构已发生了一些变化.由于他需要在Sharepoint 2013项目中使用到此功能,有大量的