Мне нужна помощь при отправке электронной почты при размещении заказа. Чтобы проиллюстрировать эту проблему, следующее абстрактный код:Django: сохранить несколько сигналов объекта один раз
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)
Большинство проблем на SO и Google, кажется, дело с одним объектом ребенка в то время; such as this.
Прослушивание OrderItem высвобождает 5 сигналов, если 5 заказов сохранены из встроенных в admin. Кажется, я не могу решить эту проблему. Один из способов, я думаю (не уверен, если возможно), мог бы слушать последние (5) сигналы post_save OrderItem.
Любая помощь приветствуется.
Будучи новичком пользователя Django, я не уверен, где эта точка была бы там, где у меня есть заказ с OrderItems. Другим способом, который я мог бы подумать, является использование 'django-cron' путем асинхронной проверки новых заказов и отправки электронной почты. Но это не кажется оптимальным решением. – Nav
Я думаю, что Том дал вам отличное предложение. Вместо того, чтобы, по мнению, вызывать отдельные методы model.save, создать метод 'submit_order' для Order и вызвать это из представления. Смотрите мой комментарий на ответ Тома. – cethegeek
Duh ... Забыл сказать: и отправить свой сигнал из нового метода 'submit_order'. – cethegeek