Spec-Zone.ru › Django 1.10

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

События форм в строках

Новое в Django 1.9.

Вы можете выполнить 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 }} добавлено, потому что блок Django admin_change_form_document_ready содержит 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.10/ref/contrib/admin/javascript/

Spec-Zone.ru

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