私はdjangoでeコマースを開発しています。問題は、Order および RowOrder の計算に関するものです。
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 の値を更新します。これはうまくいきますが、注文が作成されたときに注文確認メールを送信する必要がありますが、Order.save() でメールを送信すると:
def save(self, *args, **kwargs):
if self.status == 'NPAI':
super(Order, self).save(*args, **kwargs)
send_order_confirm(self)
その場合、当然のことながら、その時の self.roworder_set は空です。間違ったアプローチを選択したか、実際に目標を達成するためにできることはありますか? どうもありがとう。