Las señales de guardar / eliminar son generalmente favorables en situaciones en las que necesita realizar cambios que no son completamente específicos del modelo en cuestión, o podrían aplicarse a modelos que tienen algo en común, o podrían configurarse para su uso entre modelos.
Una tarea común en los save
métodos anulados es la generación automática de slugs a partir de algún campo de texto en un modelo. Ese es un ejemplo de algo que, si necesita implementarlo para varios modelos, se beneficiaría del uso de una pre_save
señal, donde el manejador de señales podría tomar el nombre del campo slug y el nombre del campo desde el que generar el slug. Una vez que tenga algo así en su lugar, cualquier funcionalidad mejorada que implemente también se aplicará a todos los modelos, por ejemplo, buscar la barra que está a punto de agregar para el tipo de modelo en cuestión, para garantizar la singularidad.
Las aplicaciones reutilizables a menudo se benefician del uso de señales: si la funcionalidad que proporcionan se puede aplicar a cualquier modelo, generalmente (a menos que sea inevitable) no querrán que los usuarios tengan que modificar directamente sus modelos para beneficiarse de ella.
Con django-mptt , por ejemplo, utilicé la pre_save
señal para administrar un conjunto de campos que describen una estructura de árbol para el modelo que está a punto de crearse o actualizarse y la pre_delete
señal para eliminar los detalles de la estructura de árbol para el objeto que se está eliminando y su totalidad subárbol de objetos antes de él y se eliminan. Debido a la utilización de señales, los usuarios no tienen que añadir o modificar save
o delete
métodos en sus modelos para tener esta gestión hecho por ellos, sólo tienen que dar a conocer django-MPTT qué modelos lo quieren manejar.