संकेत
एक संकेत एक तंत्र है जो आपके कोड को ट्रिगर करता है (function/method) जब भी किसी दिए गए प्रकार की घटना ormar में होती है।
इसलिए, आपको चयनित नमूना के दिए गए प्रकार के सिग्नल के लिए रिसीवर को पंजीकृत करने की आवश्यकता है।
प्राप्तकर्ता को परिभाषित करें
नमूना निम्नलिखित उदाहरण दिया गया है:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
उदाहरण के लिए, आप एक ट्रिगर को परिभाषित कर सकते हैं जो album.is को सेट करता है यदि एल्बम से अधिक 50 बार खेला जाता है।
प्री \ _ अपडेट डेकोरेटर आयात करें और नीचे वर्तमान में उपलब्ध डेकोरेटर/सिग्नल की सूची देखें।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
अपने फ़ंक्शन को परिभाषित करें।
कृपया ध्यान दें कि प्रत्येक रिसीवर सुविधाएँ:
- कॉल करने योग्य होना चाहिए
- प्राप्त-भेजें ऑब्जेक्ट वर्ग के पहले प्रेषक तर्क को स्वीकार करना चाहिए
- स्वीकार करना चाहिए **Kwarतर्क प्रत्येक ormar में एक तर्क के रूप में भेजा जाता है। सिग्नल किसी भी समय बदले जा सकते हैं, इसलिए आपके फ़ंक्शन को उनकी सेवा करनी चाहिए।
- यह अतुल्यकालिक होना चाहिए क्योंकि कॉलबैक एकत्र किए जाते हैं और प्रतीक्षा करते हैं।
पूर्व \ _ अद्यतन वर्तमान में प्रेषक के अलावा केवल एक पैरामीटर भेजता है, और यह एक उदाहरण है।
ध्यान दें कि प्री \ _ अपडेट डेकोरेटर प्रेषक पैरामीटर को कैसे स्वीकार करता है, जो एकल नमूना या मॉडल की सूची हो सकती है जिसके लिए आप सिग्नल रिसीवर चलाना चाहते हैं।
वर्तमान में, रिसीवर की रजिस्ट्री में सभी मॉडलों को स्पष्ट रूप से पारित किए बिना सभी मॉडलों के लिए सिग्नल सेट करना संभव नहीं है।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
!!!ध्यान दें कि रिसीवर को कक्षा स्तर पर परिभाषित किया गया है -> , इसलिए यहां तक कि अगर आप किसी उदाहरण के माध्यम से फ़ंक्शन को कनेक्ट / डिस्कनेक्ट करते हैं, तो यह उस ormar पर सभी संचालन को चलाएगा / बंद कर देगा। मॉडल वर्ग।
कृपया ध्यान दें कि हमारे नए बनाए गए फ़ंक्शन में उदाहरण और उदाहरणों की कक्षाएं हैं, इसलिए आप चाहें तो सिंक के भीतर डेटाबेस प्रश्नों को आसानी से चला सकते हैं।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
आप सिग्नल डेकोरेटर को मॉडल की एक सूची पास करके एक ही बार में कई मॉडल के लिए एक ही रिसीवर को परिभाषित कर सकते हैं।
1 2 3 4 | |
बेशक, आप एक ही सिग्नल और नमूना के लिए कई फ़ंक्शन भी बना सकते हैं। उनमें से प्रत्येक प्रत्येक सिग्नल पर चलेगा।
1 2 3 4 5 6 7 | |
कृपया ध्यान दें कि ormar डेकोरेटर वाक्यात्मक चीनी है, और आप किसी दिए गए नमूना के लिए दिए गए सिग्नल के कार्यों या तरीकों को सीधे कनेक्ट कर सकते हैं। कनेक्ट केवल एक तर्क लेता है - आपका रिसीवर फ़ंक्शन / विधि।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
!!! चेतावनी कृपया ध्यान दें कि सिग्नल रिसीवर के संदर्भ को बरकरार रखता है (एक कमजोर संदर्भ के बजाय), इसलिए परिपत्र संदर्भों से बचने के लिए इसे ध्यान में रखें।
रिसीवर डिस्कनेक्ट करें
रिसीवर को डिस्कनेक्ट करने और किसी दिए गए नमूना को चलाने से रोकने के लिए, आपको इसे डिस्कनेक्ट करने की आवश्यकता है।
1 2 3 4 5 6 7 8 9 10 | |
उपलब्ध संकेत
!!!चेतावनी, कृपया ध्यान दें कि कोई संकेत नहीं भेजा जाएगा।
1 2 3 4 | |
पूर्व-बचत
pre_save(sender: Type["Model"], instance: "Model")
Model.save भेजें () और Mo.() तरीके।
प्रेषक एक ormar है। मॉडल वर्ग, सहेजे जाने वाले नमूना का एक उदाहरण।
बचाने के बाद
post_save(sender: Type["Model"], instance: "Model")
Model.save भेजें () और Mo.() तरीके।
प्रेषक एक ormar है। मॉडल वर्ग, एक सहेजे गए नमूना का एक उदाहरण।
पूर्व-अद्यतन
pre_update(sender: Type["Model"], instance: "Model")
Mo.() विधि को भेजा गया।
प्रेषक एक ormar है। मॉडल वर्ग, अद्यतन किए जाने वाले नमूना का एक उदाहरण।
अपडेट के बाद
post_update(sender: Type["Model"], instance: "Model")
Mo.() विधि को भेजा गया।
प्रेषक एक ormar है। मॉडल वर्ग, एक अद्यतन नमूना का एक उदाहरण।
प्री-डिलीट
pre_delete(sender: Type["Model"], instance: "Model")
Model.save भेजें () और Mo.() तरीके।
प्रेषक एक ormar है। मॉडल वर्ग, हटाए जाने वाले नमूना का एक उदाहरण।
हटाने के बाद
post_delete(sender: Type["Model"], instance: "Model")
Mo.() विधि को भेजा गया।
प्रेषक एक ormar है। मॉडल वर्ग, हटाए जा रहे नमूना का एक उदाहरण।
पूर्व-संबंध जोड़
pre_relation_add(sender: Type["Model"], instance: "Model", child: "Model", relation_name: str, passed_args: Dict)
मॉडल.नाम भेजता है () कई-से-कई संबंधों की विधि और विदेशी कुंजी संबंध के उलट।
प्रेषक - प्रेषक वर्ग, उदाहरण - संबंधित नमूना का उदाहरण जोड़ें, बच्चे - नमूना जोड़ा जा रहा है, संबंध \ _ नाम - बच्चे को जोड़ने के लिए संबंध का नाम, सिग्नल जोड़ने के लिए भी पारित किया गया \ _ kwar- kwarका शब्दकोश जोड़ने के लिए पारित किया गया ()
पोस्ट रिलेशनशिप ऐड
post_relation_add(sender: Type["Model"], instance: "Model", child: "Model", relation_name: str, passed_args: Dict)
मॉडल.नाम भेजता है () कई से कई संबंधों की विधि और विदेशी कुंजी संबंध के उलट।
प्रेषक - प्रेषक वर्ग, उदाहरण - संबंधित नमूना का उदाहरण जोड़ें, बच्चे - नमूना जोड़ा जा रहा है, संबंध \ _ नाम - बच्चे को जोड़ने के लिए संबंध का नाम, सिग्नल जोड़ने के लिए भी पारित किया गया \ _ kwar- kwarका शब्दकोश जोड़ने के लिए पारित किया गया ()
पूर्व-संबंध विलोपन
pre_relation_remove(sender: Type["Model"], instance: "Model", child: "Model", relation_name: str)
मॉडल.नाम भेजता है () कई-से-कई संबंधों की विधि और विदेशी कुंजी संबंध के उलट।
प्रेषक - प्रेषक वर्ग, उदाहरण - संबंधित नमूना का उदाहरण जोड़ें, बच्चा - मॉडल जोड़ा जा रहा है, संबंध \ _ नाम - बच्चे को जोड़ने के लिए संबंध का नाम।
रिश्ते मिटाने के बाद
post_relation_remove(sender: Type["Model"], instance: "Model", child: "Model", relation_name: str, passed_args: Dict)
मॉडल.नाम भेजता है () कई-से-कई संबंधों की विधि और विदेशी कुंजी संबंध के उलट।
प्रेषक - प्रेषक वर्ग, उदाहरण - संबंधित नमूना का उदाहरण जोड़ें, बच्चा - मॉडल जोड़ा जा रहा है, संबंध \ _ नाम - बच्चे को जोड़ने के लिए संबंध का नाम।
बैच अपडेट के बाद
post_bulk_update(sender: Type["Model"], instances: List["Model"], **kwargs) , को भेजें Model.objects.bulk_update(List[objects]) विधि।
अपने स्वयं के संकेतों को परिभाषित करें
कृपया ध्यान दें कि आप अपने स्वयं के सिग्नल बना सकते हैं, हालांकि आपको मैन्युअल रूप से उन्हें कोड या सबक्लास ऑर्मर में भेजना होगा। मॉडल और वहां संकेतों को ट्रिगर करें।
एक नया सिग्नल बनाना सरल है। निम्नलिखित उदाहरण आपके \ _ कस्टम \ _ सिग्नल नाम से एक नया सिग्नल सेट करता है।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
वास्तव में, एक सिग्नल की अंतर्निहित परत एक सिग्नलइमिटर उदाहरण है जो ज्ञात संकेतों का एक शब्दकोश रखता है और आपको उन्हें गुणों के रूप में एक्सेस करने की अनुमति देता है। जब आप एक सिग्नल तक पहुंचने की कोशिश करते हैं जो मौजूद नहीं है, तो सिग्नलइमिटर आपके लिए एक सिग्नल बनाएगा।
तो उपरोक्त उदाहरण को सरल बनाया जा सकता है। सिग्नल आपके लिए बनाया जाएगा।
1 | |
अब इस सिग्नल को ट्रिगर करने के लिए, आपको सिग्नल की भेजने की विधि को कॉल करने की आवश्यकता है।
1 | |
कृपया ध्यान दें कि प्रेषक एकमात्र आवश्यक पैरामीटर है, और यह ओमार मॉडल वर्ग होना चाहिए।
अतिरिक्त मापदंडों को कीवर्ड तर्क के रूप में पारित किया जाना चाहिए।
1 | |