在Django管理界面中添加jQuery脚本

39

我将稍微简化情况。假设我有一个名为Lab的模型。

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

我应该如何操作?

1个回答

83

要将媒体添加到管理页面,您可以将其简单地添加到您的管理类的元类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)

请注意,如果您只包含一个文件,则必须将其作为元组。您也可以通过这种方式选择使用CSS。
管理器已经包含(旧版本)jquery。要快捷使用,请将此添加到“myscript”文件的顶部。
if (!$) {
    $ = django.jQuery;
}

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

2
这可能已经改变了,因为这是一个旧问题,但截至Django 1.8.1,CSS被指定为一个字典,其中键是目标媒体,值是如上所述的路径元组。使用逗号分隔来针对多个媒体或'all'(如果不具体)。 - squarelogic.hayden
2
// your code })(django.jQuery); - rabbit.aaron
更好、更短的 django.jQuery(function($) { // stuff }) - Felipe Buccioni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接