Настройки JavaScript в админке ¶
Встроенные события формы ¶
Вы можете захотеть выполнить некоторый JavaScript, когда встроенная форма добавляется или удаляется в форме изменения администратора. Это позволяют события formset:added
и formset:removed
jQuery. Обработчику события передается три аргумента:
event
этоjQuery
событие.$row
- это новая добавленная (или удаленная) строка.formsetName
набор форм, к которому принадлежит строка.
Событие запускается с использованием пространства имен django.jQuery .
В своем настраиваемом change_form.html
шаблоне расширьте
admin_change_form_document_ready
блок и добавьте код прослушивателя событий:
{% extends 'admin/change_form.html' %}
{% load static %}
{% block admin_change_form_document_ready %}
{{ block.super }}
<script src="{% static 'app/formset_handlers.js' %}"></script>
{% endblock %}
(function($) {
$(document).on('formset:added', function(event, $row, formsetName) {
if (formsetName == 'author_set') {
// Do something
}
});
$(document).on('formset:removed', function(event, $row, formsetName) {
// Row removed
});
})(django.jQuery);
Следует иметь в виду два момента:
- Код JavaScript должен
admin/change_form.html
находиться в блоке шаблона, если вы наследуете, иначе он не будет отображаться в окончательном HTML. {{ block.super }}
добавлен, потому чтоadmin_change_form_document_ready
блок Django содержит код JavaScript для обработки различных операций в форме изменения, и нам нужно, чтобы это тоже было отображено.
Иногда вам нужно работать с jQuery
плагинами, которые не зарегистрированы в django.jQuery
пространстве имен. Для этого измените способ прослушивания событий в коде. Вместо того, чтобы заключать слушателя в django.jQuery
пространство имен, слушайте событие, инициированное оттуда. Например:
{% extends 'admin/change_form.html' %}
{% load static %}
{% block admin_change_form_document_ready %}
{{ block.super }}
<script src="{% static 'app/unregistered_handlers.js' %}"></script>
{% endblock %}
django.jQuery(document).on('formset:added', function(event, $row, formsetName) {
// Row added
});
django.jQuery(document).on('formset:removed', function(event, $row, formsetName) {
// Row removed
});