Spec-Zone.ru › Django 3.2

Настройка JavaScript в админке

События инлайновых форм

Возможно, вам потребуется выполнить JavaScript-код при добавлении или удалении инлайновой формы в форме изменения админки. Для этого используются jQuery-события formset:added и formset:removed. Обработчик событий принимает три аргумента:

  • 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 %}
app/static/app/formset_handlers.js
(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 %}
app/static/app/unregistered_handlers.js
django.jQuery(document).on('formset:added', function(event, $row, formsetName) {
    // Row added
});

django.jQuery(document).on('formset:removed', function(event, $row, formsetName) {
    // Row removed
});

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/contrib/admin/javascript/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API