2010-09-01 17 views
5

2 श्रोताओं परिभाषित किया गया है समझ नहीं:Django: सिग्नल भेजा जा रहा है - प्रलेखन

def update_dashbaord_modified_date(sender, **kwargs): 
    """Listen for changes to Goal, Action, etc. since we 
    want to update the date modified on Dashbaord when a change occurs.""" 
    ... do something ... 

post_save.connect(update_dashbaord_modified_date) # Register to listen for post_save signals 
post_delete.connect(update_dashbaord_modified_date) # Register to listen for post_delete signals 

और अब, किसी लक्ष्य को बदलाव नहीं आया है अथवा कोई ऐसा लक्ष्य (मॉडल वर्ग लक्ष्य) कहते हैं के बाद, मुझे लगता है कि बचाने के लिए चाहते हैं एक संकेत भेजने के लिए। यह कैसे लागू किया जाता है। मैं इसके लिए प्रलेखन को समझ नहीं पा रहा हूं।

धन्यवाद

उत्तर

5
  1. your_app/signals.py में अपने संकेतों जहां संकेत उठाना चाहते से, अपने मॉडल/दृश्य में

    from django.dispatch import Signal
    my_signal = Signal(providing_args=["instance", "args", "kwargs"])

  2. परिभाषित करें (एप्लिकेशन कि सिग्नल बढ़ा, सुन नहीं)

    ...do some processing
    my_signal.send(sender=self.__class__, args, kwargs)
    # kwargs contains type of action, in your case
    # action= 'Added'|'Modified'|'Deleted",

  3. कुछ बाकी जहां कोड (जहां कभी आप सुनना चाहते हैं)

    my_signal.connect(this_is_my_call_back_method)

2

Django डॉक्स से:

इस कोड को कहाँ रहना चाहिए?

आप कहीं भी सिग्नल हैंडलिंग और पंजीकरण कोड डाल सकते हैं। हालांकि, आपको यह सुनिश्चित करना होगा कि उस मॉड्यूल में पर आयात किया जाता है ताकि सिग्नल हैंडलिंग को भेजे जाने से पहले किसी सिग्नल की आवश्यकता हो। यह आपके ऐप के models.py को सिग्नल हैंडलर के पंजीकरण के लिए एक अच्छी जगह बनाता है।

आप model.py में update_dashbaord_modified_date आयात कर सकते हैं और कक्षा परिभाषा के बाद post_save और post_delete हैंडलर में आपकी विधि जोड़ सकते हैं।

from signals import update_dashbaord_modified_date 
class myModel(models.Model): 
    stuff 
post_save.connect(update_dashbaord_modified_date) 
post_delete.connect(update_dashbaord_modified_date) 
+0

हाँ में, मुझे लगता है कि डॉक्स में पढ़ें। हालांकि, मुझे संकेत नहीं मिलता है कि मैं सिग्नल भेजने के लिए लक्ष्य मॉडल पोस्ट सहेजता हूं। या, क्या मुझे इसके बारे में चिंता करने की ज़रूरत नहीं है क्योंकि सिग्नल हमेशा भेजा जाता है? –

+0

सही, डिफ़ॉल्ट रूप से आपके मॉडल हमेशा निर्दिष्ट ईवेंट के लिए सिग्नल भेज देंगे। – awithrow

संबंधित मुद्दे