Personnalisations de JavaScript dans l’interface d’administration¶
Événements de sous-formulaires¶
Il peut être souhaitable d’exécuter du code JavaScript lorsqu’un sous-formulaire est ajouté ou enlevé dans un formulaire de modification du site d’administration. Les événements jQuery formset:added et formset:removed permettent de faire cela. Le gestionnaire d’événement reçoit trois paramètres :
eventest l’événement jQuery.$rowest la ligne ajoutée (ou supprimée).formsetNameest le jeu de formulaires auquel appartient la ligne.
L’événement est déclenché en utilisant l”espace de noms django.jQuery.
Dans votre gabarit change_form.html personnalisé, étendez le bloc admin_change_form_document_ready et ajoutez la fonction d’écoute avec ce code :
{% 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);
Deux points à garder en tête :
- Le code JavaScript doit se trouver dans un bloc de gabarit si vous héritez de
admin/change_form.html, sinon il ne sera pas produit dans le code HTML final. {{ block.super }}est ajouté car le blocadmin_change_form_document_readycontient du code JavaScript pour gérer diverses opérations dans le formulaire de modification et que nous avons besoin que ce contenu apparaisse aussi.
Il est parfois utile de travailler avec des greffons jQuery qui ne sont pas inscrits dans l’espace de noms django.jQuery. Pour faire cela, changez la façon dont le code écoute les événements. Au lieu d’envelopper la fonction d’écoute dans l’espace de noms django.jQuery, écoutez l’événement qui est déclenché depuis là. Par exemple :
{% 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
});