mirror of
https://github.com/django/django.git
synced 2024-12-27 11:35:53 +00:00
4a954cfd11
This patch does not remove all occurrences of the words in question. Rather, I went through all of the occurrences of the words listed below, and judged if they a) suggested the reader had some kind of knowledge/experience, and b) if they added anything of value (including tone of voice, etc). I left most of the words alone. I looked at the following words: - simply/simple - easy/easier/easiest - obvious - just - merely - straightforward - ridiculous Thanks to Carlton Gibson for guidance on how to approach this issue, and to Tim Bell for providing the idea. But the enormous lion's share of thanks go to Adam Johnson for his patient and helpful review.
82 lines
2.7 KiB
Plaintext
82 lines
2.7 KiB
Plaintext
======================================
|
|
JavaScript customizations in the admin
|
|
======================================
|
|
|
|
.. _admin-javascript-inline-form-events:
|
|
|
|
Inline form events
|
|
==================
|
|
|
|
You may want to execute some JavaScript when an inline form is added or removed
|
|
in the admin change form. The ``formset:added`` and ``formset:removed`` jQuery
|
|
events allow this. The event handler is passed three arguments:
|
|
|
|
* ``event`` is the ``jQuery`` event.
|
|
* ``$row`` is the newly added (or removed) row.
|
|
* ``formsetName`` is the formset the row belongs to.
|
|
|
|
The event is fired using the :ref:`django.jQuery namespace
|
|
<contrib-admin-jquery>`.
|
|
|
|
In your custom ``change_form.html`` template, extend the
|
|
``admin_change_form_document_ready`` block and add the event listener code:
|
|
|
|
.. code-block:: html+django
|
|
|
|
{% 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 %}
|
|
|
|
.. code-block:: javascript
|
|
:caption: 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);
|
|
|
|
Two points to keep in mind:
|
|
|
|
* The JavaScript code must go in a template block if you are inheriting
|
|
``admin/change_form.html`` or it won't be rendered in the final HTML.
|
|
* ``{{ block.super }}`` is added because Django's
|
|
``admin_change_form_document_ready`` block contains JavaScript code to handle
|
|
various operations in the change form and we need that to be rendered too.
|
|
|
|
Sometimes you'll need to work with ``jQuery`` plugins that are not registered
|
|
in the ``django.jQuery`` namespace. To do that, change how the code listens for
|
|
events. Instead of wrapping the listener in the ``django.jQuery`` namespace,
|
|
listen to the event triggered from there. For example:
|
|
|
|
.. code-block:: html+django
|
|
|
|
{% 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 %}
|
|
|
|
.. code-block:: javascript
|
|
:caption: 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
|
|
});
|