将jQuery脚本添加到Django管理界面

use*_*405 27 python django jquery admin

我会稍微简化一下情况.假设我有一个名为Lab的模型.

from django.db import models

class Lab(models.Model):
    acronym = models.CharField(max_length=20)
    query = models.TextField()
Run Code Online (Sandbox Code Playgroud)

该领域query几乎总是与该领域相同acronym.因此,我希望在Django管理界面queryacronym字段中输入文本后自动填写该字段.此任务必须由jQuery脚本执行.

所以,如果我举个例子:你想通过Django管理界面向数据库添加一个新的实验室.单击"添加"按钮,然后使用两个字段登陆空白表单.您可以手动acronym使用诸如此类的值填充该字段,ABCD然后该query字段应以相同的值自动完成,这意味着ABCD.

我该怎么办?

Hed*_*ide 54

要向管理员添加媒体,您只需将其添加到管理类的元类媒体中,例如:

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)
Run Code Online (Sandbox Code Playgroud)

如果你只包含一个文件,请记住尾随逗号,因为它必须是一个元组.你也可以这样选择css.

管理员已经包含了(旧版本)的jquery.要将其用于快捷方式,请将其添加到"myscript"文件的顶部:

if (!$) {
    $ = django.jQuery;
}
Run Code Online (Sandbox Code Playgroud)

为了解决您的问题,我会扩展管理员.您可以将js事件添加到任何DOM节点,以将myscript文件中的ajax调用触发到正确的管理视图进行处理.

  • 这可能已经改变,因为它是一个老问题,但是从Django 1.8.1开始,css被指定为字典,其中键是目标媒体,值是上面的路径元组.使用逗号分隔来定位多个媒体,如果它是非特定的,则使用"全部". (2认同)
  • ```(function($){ // 你的代码 })(django.jQuery); `` (2认同)