我正在開發django中的電子商務。 的問題是關於訂單和RowOrder計算:當關系中的所有對象都保存在django中時觸發事件(發送郵件)
class Order(Model):
STATUS = {
'NPAI': 'Not paid',
'PAID': 'Paid',
'SHIP': 'Shipped',
}
status = CharField(max_length=4, choices=STATUS.items(), editable=False, default='NPAI')
cod = CharField(max_length=30, unique=True, db_index=True, editable=False)
total_price = DecimalField(max_digits=4, decimal_places=2, default=Decimal('0.00'), editable=False)
vat = DecimalField(max_digits=4, decimal_places=2, default=Decimal('0.00'), editable=False)
[...]
class RowOrder(Model):
article = ForeignKey(Article)
order = ForeignKey(Order)
[...]
def save(self, *args, **kwargs):
# update order
with transaction.commit_on_success():
order_Locked = Order.objects.select_for_update().get(id=self.order.id)
order_Locked.total_price += self.price
order_Locked.vat_price += self.price - self.price/(1 + order_Locked.vat/100)
order_Locked.save()
正如你所看到的,我更新爲了的值每次roworder保存。這種運作良好,但現在我已經創建訂單時發送訂單確認電子郵件,但如果我發送電子郵件在Order.save():
def save(self, *args, **kwargs):
if self.status == 'NPAI':
super(Order, self).save(*args, **kwargs)
send_order_confirm(self)
那麼,正確的是,在self.roworder_set那個時間是空的。 我選擇了一種錯誤的方法,或者實際上我有什麼可以做的來實現我的目標?非常感謝。
謝謝您的回答,但不是,它不起作用。事實上,post_save在Order.save()之後被觸發,並且在那個時候,不存在任何roworder對象(yet) –
不確定,那麼你的用例是那麼。是的,我同意這個特定順序沒有roworder訂單創建時可用。 –
當我發送郵件時,我希望roworder對象實際存在 –