Начните с определения пользовательского сигнала.Пользовательский сигнал здесь является подклассом django.dispatch.Signal
.Этот код может находиться в app/signals.py
.
from django.dispatch import Signal
user_address_changed = Signal(providing_args=["user"])
Далее, убедитесь, что вы отправили этот сигнал при изменении адреса вашего пользователя.В зависимости от того, как вы определили User
и Address
, это можно сделать в разных местах.Предположим, что существует представление, позволяющее пользователям обновлять свои Address
модели.Этот код предположительно находится в 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.
Теперь вам нужно настроить приемник для этого сигнала.
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)
Обновление
(После прочтения комментария; OP объясняет, что не существует отдельного представления для обновления адреса). В этом случае вы можете попытаться переопределить User.save()
чтобы отправить этот сигнал.Я говорю «попробуй», потому что я не знаю, используете ли вы свой User
класс или auth.User
.