Django: Cómo activar una función cada vez que se modifican ciertos objetos desde la interfaz de Wagtail.
Tengo una larga lista de objetos de “Cotización”.
El precio de una cotización depende de docenas de objetos hijos (y nietos). El más bajo siendo la tarifa/hora.
Cuando cambio los objetos hijos de una cotización, como la tarifa/hora, el precio de la cotización cambia.
Me gustaría recalcular el precio de cada cotización que se vea afectada por cualquier cambio que haga en sus objetos constituyentes automáticamente. Estoy utilizando Wagtail para la administración de objetos.
No estoy seguro de cómo hacer eso, ¿debería usar señales? ¿Gancho de Wagtail?
davy.ai
Solución para recalcular los precios de cotización en Wagtail
Como experto en informática especializado en Django, Triggers, Wagtail, Django-Signals y Wagtail-Admin, existen varias formas de recalcular el precio de cada cotización que se vea afectada por cualquier cambio que realices en sus objetos constituyentes de forma automática. Una opción es utilizar Django-Signals, mientras que otra es utilizar Wagtail Hooks.
Utilizando Django-Signals:
Django-Signals proporciona una forma de notificar ciertas partes de tu aplicación cuando ocurren ciertas acciones en otro lugar de tu código. Mediante el uso de señales, puedes recalcular los precios de las cotizaciones afectadas automáticamente, sin necesidad de ninguna entrada adicional por parte del usuario.
Para utilizar señales, tendrás que crear un archivo
models.py
en tu aplicación y escribir una función que calcule los nuevos precios. La función deberá aceptar el objeto Quotation y los objetos hijos modificados como argumentos, y luego calcular el nuevo precio en función de la tarifa/hora de los objetos hijos.Aquí tienes un ejemplo de fragmento de código que muestra la lógica de cálculo:
Este código escucha la señal m2m_changed que se envía cuando se añade un objeto a la relación Quotation.children, y luego calcula el nuevo precio en función de la tarifa/hora actualizada.
Utilizando Wagtail Hooks:
Los hooks de Wagtail proporcionan una forma de modificar el comportamiento de ciertas partes de la interfaz de administración de Wagtail. Mediante el uso de hooks, puedes recalcular los precios de las cotizaciones afectadas automáticamente cada vez que un usuario cambie la tarifa/hora de un objeto hijo.
Para utilizar hooks, tendrás que crear un archivo
wagtail_hooks.py
en tu aplicación y escribir una función que calcule los nuevos precios. La función deberá aceptar el objeto Quotation y los objetos hijos modificados como argumentos, y luego calcular el nuevo precio en función de la tarifa/hora de los objetos hijos.Aquí tienes un ejemplo de fragmento de código que muestra la lógica de cálculo:
Este código añade un botón “Recalcular Cotizaciones” a la página de administración de objetos Quotation. Cuando se hace clic, se activa una vista que recalcula los precios de todas las cotizaciones afectadas.
Estos son solo algunos ejemplos de las muchas formas en las que puedes recalcular los precios de las cotizaciones afectadas automáticamente en Wagtail. En última instancia, la mejor solución dependerá de tu caso de uso específico, así que no dudes en experimentar con enfoques diferentes hasta encontrar el que mejor funcione para ti.