कस्टम सिग्नल को परिभाषित करके प्रारंभ करें। यहां एक कस्टम सिग्नल 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)
अद्यतन
(टिप्पणी को पढ़ने के बाद, ओपी बताते हैं कोई अलग राय यह है कि अद्यतन को संबोधित है कि वहाँ) उस मामले में आप इस संकेत भेजने के लिए User.save()
ओवरराइड करने के लिए कोशिश कर सकते हैं। मैं कहता हूं "कोशिश करें" क्योंकि मुझे नहीं पता कि आप अपने User
कक्षा या auth.User
का उपयोग कर रहे हैं या नहीं।
स्रोत
2010-08-19 11:09:54
धन्यवाद, यह एक सामने के अंत उपयोगकर्ता के अपडेट के लिए ठीक काम करेगा। लेकिन अगर हम व्यवस्थापक पैनल के माध्यम से पता बदलते हैं, तो इस दृश्य को नहीं कहा जाएगा और इसलिए यह संकेत नहीं भेजा जाएगा। –
अद्यतन उत्तर। ऊपर देखो। –
यह उपयोगकर्ता के साथ एक विदेशी मॉडल के रूप में एक अलग मॉडल है .. तो मुझे लगता है कि इस मामले में User.save() संभव नहीं है? –