I need some help with sending email when an order is placed. To illustrate the problem, following is the abstract code:
class Order(models.Model):
user = models.ForeignKey(User)
class OrderItem(modes.Model):
order = models.ForeignKey(Order, related_name='items')
item = models.CharField(max_length=255)
unit_price = models.DecimalField()
qty = models.IntegerField()
item_amount = models.DecimalField()
def email_order_on_save(sender, instance, **kwargs):
# Need order.items.all() here
pass
post_save.connect(email_order_on_save, sender=Order)
Most of the problems on SO and google seem to deal with one child object at a time; such as this.
Listening to OrderItem would release 5 signals if 5 orders items saved from admin inlines. I can’t seem to get my head around this problem. One way, I think (not sure if possible), could be listening to last of all(5) OrderItem’s post_save signals.
Any help appreciated.
Create your own custom signal and send it at the point when you have the data you need saved. Pass in as parameters whatever data structures you need.
Listen for your custom signal in your callback function
email_order_on_saveand make appropriate decisions based on the parameters about sending or not the e-mail.