Мне нужно выполнить ряд простых вычислений для объекта модели «Счет-фактура», с которым связано несколько дочерних элементов «Заказ», которые содержат количество заказа, его стоимость и т. Д. заказ в виде строк)
Код, с которым я сейчас работаю, выполняет такие вычисления следующим образом:
Счет-фактура (models.py)
def save():
#get the total of all associated orders
for order in self.invoice_orders.all():
self.invoice_net_total += order.order_value
super(Invoice, self).save()
Что вызывает некоторые проблемы при изменении количества дочернего заказа и последующем сохранении формы - вместо новой общей суммы я получаю предыдущую сумму, только при повторном сохранении общая сумма исправляется сама. Возможно, благодаря тому, как Django сохраняет родительские и дочерние объекты?
Другой вариант, с которым я играл, заключался в переносе этого вычисления на объект дочернего заказа (подготовка к ужасному коду):
Заказ (models.py)
def save():
if not self.id:
self.invoice.invoice_net_total += self.order_value
elif self.id:
#grab old instance
old = Order.objects.get(pk=self.id)
#remove that old total
self.invoice.invoice_net_total -= old.order_value
self.invoice.save()
#add new total
self.invoice.invoice_net_value += self.order_value
self.invoice.save()
Хотя это тоже не очень эффективно.
Хотите знать, кто-нибудь может привести меня к прямому способу обеспечения того, чтобы эти кальки работали так, как должны? Мысль о сигналах (относительно новых для меня), но задавался вопросом, было ли это излишним. Я, наверное, обдумываю это!
Спасибо