Beginnen Sie mit der Definition eines benutzerdefinierten Signals. Ein benutzerdefiniertes Signal ist hier eine Unterklasse von django.dispatch.Signal
. Dieser Code kann in app/signals.py
leben.
Als nächstes stellen Sie sicher, dass Sie dieses Signal senden, wenn Ihre Benutzeradresse geändert wird. Je nachdem, wie Sie User
und Address
definiert haben, kann dies an verschiedenen Stellen geschehen. Nehmen wir an, dass es eine Ansicht gibt, mit der Benutzer ihre Address
Modelle aktualisieren können. Dieser Code ist vermutlich in 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.
Jetzt müssen Sie einen Empfänger für dieses Signal einrichten.
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)
aktualisieren
(Nach Kommentar zu lesen, der OP erklärt, dass es keine separate Ansicht ist, dass Updates adressieren) In diesem Fall können Sie versuchen, User.save()
außer Kraft zu setzen, dieses Signal auszusenden. Ich sage "versuchen", weil ich nicht weiß, ob Sie Ihre eigene User
Klasse oder auth.User
verwenden.
Dank für Ihre Antwort manoj, würde dies eine für die Front-End-Benutzer Updates funktionieren. Aber wenn wir die Adresse über das Admin-Panel ändern, wird diese Ansicht nicht aufgerufen und daher wird dieses Signal nicht gesendet. –
Aktualisierte Antwort. Siehe oben. –
ist ein separates Modell mit Benutzer als Fremdschlüssel .. so denke ich User.save() ist in diesem Fall nicht möglich? –