django admin list_filter太长了

时间:2012-03-22 10:33:19

标签: django django-admin

我有一个list_filter有很多扇区。此列表位于页面右侧,太长。

我可以使用输入选择字段,因为我不能选择多个扇区吗?

我之前看过这个,截图,但我找不到这样做的方法。

编辑

我有一个自定义的FilterSpec而不是list_filter

4 个答案:

答案 0 :(得分:1)

您可以编写自己的自定义FilterSpec(自定义管理列表过滤器)。

此功能尚未成为Django代码的一部分;计划用于1.2版本。您需要将此修补程序应用于Django代码:http://code.djangoproject.com/ticket/5833

stackoverflow上有很多关于如何做到这一点的例子,例如:https://stackoverflow.com/a/1294952/342473

答案 1 :(得分:0)

答案 2 :(得分:0)

您所说的长列表来自内置ListFilters的django / contrib / admin / templates / admin / filter.html中的默认模板“admin / filter.html”。

有几种方法可以自定义它:

  1. 全局覆盖'admin / filter.html'。如果选项计数达到一定限度,则渲染选择标记而不是ul标记。这会影响admin中的所有列表过滤器。 select标签应该具有onchange事件处理程序,如

    < select ... onchange =“location.href = this.options [this.selectedIndex] .value”>

  2. 将特定ListFilter实例中的模板属性设置为自定义过滤器模板的名称。模板的内容类似于#1。这需要Django 1.4+。

  3. 在ModelAdmin实例中添加javascript,以便在DOM完全加载后立即将ul标记内的HTML内容转换为选择标记。

答案 3 :(得分:0)

这是我解决它的方式(jQuery):

 $('#changelist-filter ul').each(function(){

        var maxlength = 10;

        if ($(this).children().length > maxlength )
        {
            var list=$(this),
                select=$(document.createElement('select')).insertBefore($(this).hide());

            $('>li a', this).each(function(){
                console.log($(this).parent().attr('class'));

                var target=$(this).attr('target'),
                    option=$(document.createElement('option'))
                        .appendTo(select)
                        .val(this.href)
                        .attr('selected', $(this).parent().attr('class'))
                        .html($(this).html())
                        .click(function(){
                            if (target==='_blank'){
                                window.open($(this).val());
                            }
                            else{
                                window.location.href=$(this).val();
                            }
                        });
            });
            list.remove();

        }
    });