मैंने django सिग्नल (http://docs.djangoproject.com/en/dev/topics/signals/) के बारे में पढ़ा है, लेकिन जहां तक मैं समझता हूं, सिग्नल कभी भी शाब्दिक एसक्यूएल ट्रिगर्स (http://en.wikipedia.org/wiki/Database_trigger) में परिवर्तित नहीं होते हैं।django-signals बनाम ट्रिगर्स?
यदि मैं सही हूं कि सिग्नल और ट्रिगर अलग हैं, तो कौन सा बेहतर है और किस तरह से? सबसे अच्छा अभ्यास क्या है?
....................
यहाँ एक ठोस उदाहरण है अगर आप एक हैं:
class Location(models.Model):
name = models.CharField(max_length=30)
class Person(models.Model):
location = models.ForeignKey('Location')
class Team(models.Model):
locations = models.ManyToManyField('Location')
मैं एक व्यक्ति होना चाहते हैं एक टीम में शामिल होने में सक्षम अगर केवल और उस व्यक्ति का स्थान उस टीम के स्थानों के सेट के भीतर है। मुझे नहीं पता कि सामान्य रिलेशनल बाधाओं के साथ ऐसा कैसे किया जाए, इसलिए जहां तक मुझे पता है कि मुझे ट्रिगर या सिग्नल का उपयोग करने के लिए मजबूर होना पड़ता है। मेरा आंत कहता है कि मुझे ट्रिगर्स का उपयोग करना चाहिए लेकिन मैं सबसे अच्छा अभ्यास जानना चाहता हूं।
+1:: यह और 'मॉडल में save' के लिए एक सरल ओवरराइड सभी ठिकानों मैंने कभी सामना किया है को शामिल किया गया
यहाँ एक उदाहरण यह कैसे काम करता है। –
+1। सिग्नल आमतौर पर आपके परीक्षणों को धीमा करते हैं यदि आप संकेतों को ट्रिगर करने वाले फिक्स्चर लोड कर रहे हैं। परीक्षणों से पहले 'डिस्कनेक्ट' आईएनजी के बाद काम करना और बाद में 'कनेक्ट' करना दर्द होता है। –
मेरे पास दो लक्ष्य हैं: 1) साइट को जो भी मैं चाहता हूं (वैध) 2) मुझे * जब मैं गलती करता हूं तो मुझे पकड़ो। # 1 के संदर्भ में, यह सुझाव समझ में आता है। # 2 के संदर्भ में, यदि मैं डीबी के साथ बातचीत करने के लिए मॉडलफॉर्म का उपयोग नहीं करता तो क्या होगा? प्रलेखन कहता है "ध्यान दें कि जब आप मॉडल सहेजते हैं तो वैधकर्ता स्वचालित रूप से नहीं चलेंगे"। इसका मतलब है कि अब मैं डेटा अखंडता को गलती से खो सकता हूं क्योंकि मैंने डीबी को संशोधित करने से पहले 'Person.save()' को कॉल करके एक वैधकर्ता नहीं बुलाया था। लेकिन ट्रिगर्स के साथ, ट्रिगर को गलती से रोकने के लिए असंभव है। क्या मेरा तर्क समझ में आता है? –