Si consideri il seguente:django segnale post_save manda formsets linea obsoleti
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(...)
Ora voglio inviare una e-mail con i dettagli OrderForm ogni volta che qualcuno crea una o modificare uno.
Nessuna scienza missilistica finora .. usiamo solo un segnale post_save;
post_save.connect(email_notify, sender=OrderForm)
Ma c'è un piccolo problema, l'oggetto OrderForm passato a email_notify viene aggiornato con i nuovi dati come previsto, ma non le voci OrderFormLine correlate.
Ho provato a sovrascrivere i metodi di salvataggio nell'amministratore AND E nel modello, ho provato a salvare l'oggetto, il modulo e la sua relazione prima di passarlo al mio gestore di notifica, non funziona nulla.
Sono consapevole che potrei collegare il segnale post_save al modello OrderItem, ma poi l'email sarebbe stata inviata per ogni articolo.
Aiuto Sono sull'orlo della pazzia.
UPDATE:
Found a simple and reliable solution
Breve storia:
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)
È necessario salvare il modulo d'ordine per avere un numero identificativo valido da associare agli elementi pubblicitari. Mi sembra che un segnale personalizzato sia in ordine; questo potrebbe salvarti dalla tua follia. A volte, i casi speciali non sono malvagi, e questo è un caso speciale molto piccolo. "OrderForm" segnala quando è completamente istanziato, e il listener lo attende invece di post_save. –
Non ho mai sentito parlare di segnali personalizzati .. e non riesco a trovare molto su questo argomento. Da quello che capisco, i segnali sono strettamente accoppiati nel django e non esiste alcun meccanismo per fornire segnali personalizzati. È documentato? –
non importa, ho trovato il documento –