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

Встроенные события формы

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

  • 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 %}
приложение / 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 %}
приложение / статические / приложение / 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
});

Copyright ©2021 All rights reserved