2017-06-14 3 views
0

私はジャンゴの知識を向上させようと努力しています。私はこの個人的なプロジェクトに取り組んでいます。私は2つのカテゴリ、より一般的なメインカテゴリとサブカテゴリのフィルタを持っています。Django - 最初のフィールドに従って、2番目のlist_filterフィールドをリアルタイムで更新しますか?

例として、main_category = smartphone、sub_category = samsung_phonesがあります。

models.pyでの私のクラスには、次のようになります。

class Products(models.Model): 

    product_name = models.CharField(max_length=20) 
    main_category = models.CharField(max_length=50) 
    sub_category = models.CharField(max_length=50) 

そしてadmin.pyで私のクラスは次のようになります。

class ProductsAdmin(ImportExportModelAdmin): 
    ... 
    list_filter = ['main_category', 'sub_category'] 
    ... 

は今、私がしたいものを/、というのが私の/ adminにありますページでは、 'main_category'で選択した内容に従って、 'sub_category'フィルタの内容をリアルタイムで変更したいと考えています。これは可能ですか?今のところ、実際にはスペースを取る以外のことはしないので、main_categoryフィルタ自体は無駄です。私はこれを行うのは簡単なことだと思うが、私はそれについてのドキュメントを見つけることができない。あなたが先行データを知らないか、それが大きく変化し、したがって構築することができない場合は

class ProductsAdmin(ImportExportModelAdmin): 
    ... 
    list_filter = ['main_category', 'sub_category'] 
    ... 

    class Media(object): 
     js = (
      'app/js/myscript.js', # app static folder 
     ) 

Djangoのバージョンは、私はjQueryの注入でそれを行うだろう1.9.1

答えて

1

です2つのフィルタ要素を制御するjQuery/javascript関数を使用するには、動的js/jQueryを挿入するためにchange_list関数とテンプレートをオーバーライドする必要があります。

私はあまりにも怠惰で何も問題ではないので、私はjsファイルを作成します。管理ページにアクセスするたびにダイナミックjsで上書きします。

EDIT 1: のjsファイルは、この(オフコースこれは非常に改善することができますが、それはあなた次第です)のようなものが考えられます。「私は先行データを知っていますか、そして、彼らはドン

// save here your array with data 
my_main_category = { 
    "": ['Samsung', 'Nokia', 'Dacia', 'Alfa Romeo', 'Volga'], // add them all 
    "Smartphones": ['Samsung', 'Nokia'], 
    "Cars": ['Dacia', 'Alfa Romeo', 'Volga'] 
}; 

// copy options to repopulate sub category select 
var $sub_category_options = $('select[data-name="sub_category"] > option').clone(); 

$('select[data-name="main_category"]').on('change', function() { 
    $('select[data-name="sub_category"]').empty().append($sub_category_options); 
    $('select[data-name="sub_category"] option').each(function() { 
     if ($.inArray($(this).val(), my_main_category[$('select[data-name="main_category"]').val()])) { 
      $(this).remove(); 
     } 
    }) 
}); 
+0

全く変わりません。だから、私はjQueryの注入がうまくいくと思う。しかし、私は正直にJSに精通しているわけではありません、あなたは私にこれを行う可能性がある方法を見ることができる関連リンク/ docを参照してもいいですか? – Helicopter

+1

ヘリコプターは私の編集を参照してください。私はそれをテストしませんでしたが、正しい方向にあなたを指す必要があります。乾杯! –

+0

答えDanさんありがとう!私はこれを調べます。 – Helicopter

関連する問題