2012-03-22 42 views
3

我有一個list_filter與部門負荷。該列表位於頁面的右側,時間太長。django admin list_filter太長

我可以使用輸入選擇字段嗎?因爲我不能選擇多個扇區?

我以前看過這個截圖,但是我找不到辦法做到這一點。

編輯:

我有一個自定義的FILTERSPEC不是list_filter

回答

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(); 

     } 
    }); 
1

您可以編寫自己的自定義FILTERSPEC(自定義管理列表過濾器)。

此功能不是Django代碼的一部分;它計劃在版本1.2。您需要將此補丁應用於Django代碼:http://code.djangoproject.com/ticket/5833

關於如何做到這一點,在stackoverflow上有很多例子,例如:https://stackoverflow.com/a/1294952/342473

+0

我的意思輸入我的自定義過濾器的所有項目中選擇一個長長的清單,而不是 – nelsonvarela 2012-03-22 13:19:12

0

長長的名單,你說是來自默認模板 '管理/ filter.html',在Django /的contrib /管理/模板/管理/ filter.html,內置ListFilters的。

有幾種方式來定製它:

  1. 在全球範圍內覆蓋 '管理/ filter.html'。如果選項的數量達到某個限制,則呈現選擇標記而不是ul標記。這會影響管理中的所有列表過濾器。選擇標記應該有onchange事件處理程序像

    <選擇...的onchange = 「location.href = this.options [this.selectedIndex] .value的」 在你的具體情況ListFilter>

  2. 設置模板屬性,到自定義過濾器模板的名稱。模板的內容像#1。 Django 1.4+是必需的。

  3. 在ModelAdmin實例中添加javascript,以在DOM完全加載後立即將ul標籤內的HTML內容轉換爲選擇標籤。
+0

選項NR 3做到了! – nelsonvarela 2012-03-23 10:05:34

+0

@NelsonVarela很高興幫助=)我回顧了答案,發現#2只適用於Django 1.4+,FYI。 – okm 2012-03-23 10:11:54