39

状況を少し単純化します。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 管理インターフェイスを介して新しいラボをデータベースに追加するとします。追加ボタンをクリックすると、2 つのフィールドがある空のフォームが表示されます。acronymフィールドに次のような値を手動で入力するABCDと、queryフィールドは自動的に同じ値で完了する必要があります。つまり、ABCD.

どのように進めればよいですか?

4

1 に答える 1

79

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

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 呼び出しをトリガーして、適切な管理ビューに処理させることができます。

于 2013-04-15T12:10:51.480 に答える