当在管理员更改表单中添加或删除内联表单时,可能需要执行一些JavaScript。 formset:added
和formset:removed
jQuery事件允许这一点。 事件处理程序传递三个参数:
event
是jQuery
事件。$row
是新添加(或删除)行。formsetName
是行所属的表单集。事件使用django.jQuery namespace触发。
在您的自定义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);
要注意两点:
admin/change_form.html
或者不会在最终的HTML中呈现,JavaScript代码必须位于模板块中。{{ block.super }}
是因为Django的admin_change_form_document_ready
块包含JavaScript代码来处理变更表中的各种操作,我们也需要这样做。有时您需要使用未在django.jQuery
命名空间中注册的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
});
2017年9月6日