Comience definiendo una señal personalizada. Una señal personalizada aquí es una subclase de django.dispatch.Signal
. Este código puede vivir en app/signals.py
.
from django.dispatch import Signal
user_address_changed = Signal(providing_args=["user"])
A continuación, asegúrese de enviar esta señal cuando se modifique la dirección de su usuario. Dependiendo de cómo haya definido User
y Address
, esto se puede hacer en diferentes lugares. Supongamos que hay una vista que permite a los usuarios actualizar sus modelos Address
. Este código se presume en app/views.py
.
from app import signals
def update_address(request, *args, **kwargs):
# all the changes go well.
signals.user_address_changed.send(sender=None, user=request.user)
# Render to template etc.
Ahora necesita configurar un receptor para esta señal.
from app.signals import user_address_changed
def handle_user_address_change(sender, **kwargs):
"""Trap the signal and do whatever is needed"""
user = kwargs['user']
# Write to log, update db, send mail etc.
user_address_changed.connect(handle_user_address_change)
actualización
(Después de leer comentarios; el OP explica que no existe un criterio independiente que actualizaciones de dirección) En ese caso se puede tratar de anular User.save()
para enviar esta señal. Digo "intentar" porque no sé si está utilizando su propia clase User
o auth.User
.
gracias por su respuesta Manoj, éste podría funcionar bien para las actualizaciones de usuario front-end. Pero si cambiamos la dirección a través del panel de administración, no se llamaría a esta vista y, por lo tanto, esta señal no se enviaría. –
Respuesta actualizada. Véase más arriba. –
es un modelo separado con el usuario como una clave externa ... así que supongo que User.save() no es posible en este caso? –