2012-03-22 5 views
3

私はlist_filterのセクタがあります。このリストはページの右側にあり、長すぎます。django admin list_filter too too

複数のセクタを選択できないため、代わりに入力選択フィールドを使用できますか?

私はこの前に、スクリーンショットを見ましたが、私はこれを行う方法を見つけることができません。

編集:

私はカスタムFilterSpecにはない独自のカスタム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

を持っています。

この機能はまだDjangoコードの一部ではありません。それはバージョン1.2のために計画されています。このパッチは、Djangoコードhttp://code.djangoproject.com/ticket/5833に適用する必要があります。

これには、https://stackoverflow.com/a/1294952/342473など、多くの例があります。

+0

私は入力を意味代わりに、長いリストのすべての項目を選択する私のカスタムフィルタ – nelsonvarela

0

あなたが言った長いリストが組み込みListFiltersの、ジャンゴに/ contrib /管理/テンプレート/管理/ filter.htmlで、デフォルトのテンプレートにadmin/filter.html "から来ています。

  1. グローバルオーバーライドにadmin/filter.html ':

    は、それをカスタマイズする方法はいくつかあります。選択肢の数が一定の制限を超えた場合は、ulタグの代わりにselectタグをレンダリングします。これはadminのすべてのリストフィルタに影響します。 selectタグ>は

    <のようなのonchangeイベントハンドラは...のonchange = "LOCATION.HREF = this.options [this.selectedIndex] .VALUE" を選択し、あなたの特定のListFilterインスタンスで

  2. 設定テンプレートの属性を持っている必要がありますカスタマイズされたフィルタテンプレートの名前に変更します。テンプレートの内容は#1のようです。これにはDjango 1.4+が必要です。

  3. ModelAdminインスタンスにjavascriptを追加して、ulタグ内のHTMLコンテンツを、DOMが完全にロードされるとすぐにタグを選択するように変換します。
+0

オプションNR 3それをやりました! – nelsonvarela

+0

@NelsonVarela喜んで助ける=)私は答えを見直し、#2はDjango 1.4+、FYIのみで動作することを発見しました。 – okm