2013-04-15 15 views
15

私は状況をやや簡略化します。 Labというモデルがあるとしましょう。Django管理インターフェースにjQueryスクリプトを追加する

from django.db import models 

class Lab(models.Model): 
    acronym = models.CharField(max_length=20) 
    query = models.TextField() 

フィールドqueryは、ほぼ常にフィールドacronymと同じです。したがって、queryフィールドは、Django管理インターフェースのacronymフィールドにテキストを入力した後に自動的に入力されます。このタスクは、jQueryスクリプトで実行する必要があります。

例を挙げれば、Django管理インターフェースを介してデータベースに新しいラボを追加したいとします。追加ボタンをクリックすると、空のフォームに2つのフィールドが表示されます。手動でのような値を使用してacronymフィールドを入力してから、queryフィールドを同じ値、つまりABCDを使用して入力する必要があります。

どうすればよいですか?あなたは、単にあなたの管理者クラスのメタクラスのメディアに追加することができ、管理、などにメディアを追加するには

答えて

35

admin.py

class FooAdmin(admin.ModelAdmin): 
    # regular stuff 
    class Media: 
     js = (
      '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', # jquery 
      'js/myscript.js',  # project static folder 
      'app/js/myscript.js', # app static folder 
     ) 

admin.site.register(Foo, FooAdmin) 

マインド末尾のコンマあなたの場合のみタプルでなければならないので、1つのファイルが含まれています。このようにしてcssを選択することもできます。

管理者にはすでにjqueryが含まれています(古いバージョン)。使用のためにそれをショートカットするために「のMyScript」ファイルの先頭に以下を追加:

if (!$) { 
    $ = django.jQuery; 
} 

はあなたの問題を解決するために、私はextend the adminでしょう。任意のDOMノードにjsイベントを追加して、myscriptファイルのajax呼び出しを適切な管理ビューにトリガーして処理することができます。

+2

Django 1.8.1では、cssはキーがターゲットメディアであり、値が上記のようなパスのタプルである辞書として指定されています。複数のメディアをターゲットにするにはコンマ区切りを使用し、非特定の場合は「すべて」を使用します。 –

関連する問題