Добавление jQuery script в интерфейс администратора Django

Я немного упрощу ситуацию. Скажем, у меня есть модель под названием Lab.

from django.db import models

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

Поле query почти всегда совпадает с полем acronym. Таким образом, я бы хотел, чтобы поле query было автоматически заполнено после ввода текста в поле acronym в интерфейсе администратора Django. Эта задача должна выполняться с помощью jQuery script.

Итак, если я приведу пример: вы хотите добавить новую лабораторию в базу данных через интерфейс администратора Django. Вы нажимаете кнопку "Добавить", и вы приземляетесь в пустой форме с двумя полями. Вы вручную заполните поле acronym значением, таким как ABCD, а затем поле query должно быть закончено с тем же значением, что означает ABCD.

Как мне следует продолжить?

Ответы

Ответ 1

Чтобы добавить носитель в администратор, вы можете просто добавить его в мета-класс 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;
}

Чтобы решить вашу проблему, я бы расширил админ. Вы можете добавить js-событие в любой DOM node, чтобы вызвать вызов ajax в вашем файле myscript для правильного представления администратора для обработки.