码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-21 18:01:45      阅读:873      评论:0      收藏:0      [点我收藏+]

标签:

以默认的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

谢谢!

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

标签:

原文地址:http://www.cnblogs.com/Tommy-Yu/p/5417987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!