Spec-Zone.ru › Django 1.11

Настройка 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 type="text/javascript" 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 type="text/javascript" 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
});

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

Spec-Zone.ru

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