निम्नलिखित पर विचार करें:Django post_save संकेत भेजता है पुराना इनलाइन formsets
class OrderForm(models.Model):
title = models.CharField(max_length=100)
desc = models.TextField()
class OrderFormLine(models.Model):
order = models.ForeignKey(OrderForm)
lagel = models.CharField(max_length=100)
qty = models.IntegerField(...)
price = models.FloatField(...)
अब मैं orderform विवरण के साथ एक ईमेल भेजना चाहते हैं जब भी किसी एक बनाता है या एक संशोधित करते हैं।
अब तक कोई रॉकेट विज्ञान नहीं है .. चलो बस एक post_save सिग्नल का उपयोग करें;
post_save.connect(email_notify, sender=OrderForm)
लेकिन वहाँ एक छोटे से समस्या, OrderForm वस्तु नए डेटा के रूप में उम्मीद के साथ अद्यतन किया जाता है email_notify को पारित कर दिया है, लेकिन नहीं संबंधित OrderFormLine आइटम नहीं है।
मैंने व्यवस्थापक और मॉडल में सहेजने के तरीकों को ओवरराइड करने का प्रयास किया है, मैंने ऑब्जेक्ट, फॉर्म और उसके संबंध को मेरे अधिसूचना हैंडलर को पास करने से पहले सहेजने की कोशिश की है, कुछ भी काम नहीं करता है।
मुझे पता है कि मैं post_save सिग्नल को ऑर्डरइटम मॉडल में संलग्न कर सकता हूं, लेकिन फिर ईमेल प्रत्येक आइटम के लिए भेजा जाएगा।
सहायता मैं पागलपन के कगार पर हूं।
अद्यतन:
Found a simple and reliable solution
लघु कहानी:
def email_notify_orderform(sender, **kwargs):
instance = kwargs['instance']
ct = ContentType.objects.get_for_model(OrderForm)
if ct.id == instance.content_type.id:
print instance.is_addition()
print instance.is_change()
print instance.is_deletion()
print instance.change_message
print instance.action_time
print instance.get_edited_object().total() # BINGO !
post_save.connect(email_notify_orderform, sender=LogEntry)
आपको अपने लाइन आइटम से संबद्ध करने के लिए एक मान्य आईडी नंबर रखने के लिए ऑर्डर फॉर्म को सहेजना होगा। मुझे लगता है कि एक कस्टम सिग्नल क्रम में है; जो आपको पागलपन से बचा सकता है। कभी-कभी, विशेष मामले बुरा नहीं होते हैं, और यह एक बहुत छोटा मामला है। "ऑर्डरफॉर्म" संकेत देता है जब यह पूरी तरह से तत्काल होता है, और आपका श्रोता post_save के बजाय इसके लिए प्रतीक्षा करता है। –
मैंने कस्टम सिग्नल लिखने के बारे में कभी नहीं सुना .. और मुझे इस विषय के बारे में बहुत कुछ नहीं मिल रहा है। जो मैं समझता हूं उससे सिग्नल कसकर django में मिलते हैं और कस्टम सिग्नल प्रदान करने के लिए कोई तंत्र नहीं है। क्या यह दस्तावेज है? –
कभी नहीं, डॉक्टर –