2013-04-15 9 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. Таким образом, я бы хотел, чтобы поле query было автоматически заполнено после ввода текста в поле acronym в интерфейсе администратора Django. Эта задача должна выполняться скриптом 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 для правильного представления администратора для обработки.

+2

Возможно, это изменилось, так как это старый вопрос, но с Django 1.8.1 css указан как словарь, ключ которого является целевым носителем, а значение является кортежем путей, как указано выше. Используйте разделение запятой для задания нескольких медиаданных или «всех», если они неспецифичны. –