2013-04-15 82 views
15

我會稍微簡化一下情況。假設我有一個名爲Lab的模型。添加一個jQuery腳本到Django管理界面

from django.db import models 

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

領域query幾乎總是一樣的領域acronym。因此,我想在Django管理界面的acronym字段中輸入文本後,query字段將自動填入。這個任務必須由一個jQuery腳本執行。

所以,如果我舉一個例子:你想通過Django管理界面添加一個新的實驗室到數據庫。您單擊添加按鈕,然後您將在兩個字段的空白表單上着陸。您手動填入acronym字段,其​​值爲ABCD,然後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) 

心靈後面的逗號如果只有你包含一個文件,因爲它必須是一個元組。你也可以用這種方式選擇CSS。

管理員已包含jquery(舊版本)。爲了快捷它使用它添加到「的MyScript」文件的頂部:

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

爲了解決你的問題,我會extend the admin。您可以將js事件添加到任何DOM節點,以觸發您的myscript文件中的ajax調用到正確的管理視圖進行處理。

+2

這可能已經改變,因爲這是一個老問題,但從Django 1.8.1開始,css被指定爲字典,其中鍵是目標媒體,值是上述路徑的元組。使用逗號分隔來定位多個媒體,如果不是特定的,則使用「全部」。 –