web-dev-qa-db-ja.com

jQueryスクリプトをDjango管理インターフェースに追加する

状況を少し簡略化します。 Labというモデルがあるとします。

from Django.db import models

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

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

したがって、例を挙げます。Django adminインターフェイスを介してデータベースに新しいラボを追加します。追加ボタンをクリックすると、2つのフィールドがある空のフォームが表示されます。 acronymフィールドにABCDなどの値を手動で入力すると、queryフィールドに同じ値、つまりABCDが自動的に入力されます。

どうすればいいですか?

28
user2282405

メディアを管理者に追加するには、管理者クラスのメタクラスメディアにメディアを追加するだけです。例:

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;
}

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

53