Я работаю над проектом django, где хочу реализовать сигнал, который должен вызываться при изменении какого-либо пользовательского адреса , Я видел встроенные сигналы, но они, похоже, не работают в моем случае, потому что, если я использую функцию сохранения, она будет вызываться и в других событиях сохранения, и, хотя я могу создать собственный сигнал, я не смогу выяснить, Как мне это назвать?
Пожалуйста, предложите.
Заранее спасибо.
Начните с определения пользовательского сигнала. Пользовательский сигнал здесь является подклассом django.dispatch.Signal
. Этот код может находиться в app / signal.py
.
from django.dispatch import Signal
user_address_changed = Signal(providing_args=["user"])
Затем убедитесь, что вы отправляете этот сигнал при изменении адреса вашего пользователя. В зависимости от того, как вы определили пользователя
и адрес
, это можно сделать в разных местах. Предположим, существует представление, которое позволяет пользователям обновлять свои модели 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
.