Я использую 'DRF Writable Nested' https://github.com/beda-software/drf-writable-nested для записи вложенного сериализатора, где 'final_amount' зависит от связанных объектов.
Сигнал 'post_save' для триггеров 'Invoice' только когда он будет сохранен, как ожидалось, но в этот момент связанные объекты не существуют. Я знаю, что сначала «Invoice» сохраняется, а затем его «pk» используется «InvoiceItem» в поле его счета.
Мое требование - запускать сигнал только при создании связанных объектов.
class Invoice(models.Model):
customer = models.ForeignKey(
Customer, on_delete=models.CASCADE, related_name='orders')
products = models.ManyToManyField(Product, through='InvoiceItem')
@property
def final_amount(self):
'''
Total invoice amount
'''
return self.invoice_items\
.aggregate(total=Sum('item_details__amount'))['total']
class InvoiceItem(models.Model):
invoice = models.ForeignKey(
Invoice, on_delete=models.CASCADE, related_name='invoice_items')
product = models.ForeignKey(
Product, on_delete=models.CASCADE, related_name='invoice_items')
@property
def total_quantity(self):
'''
Total quantity for a particular product with all its sizes
taken together.
'''
return self.item_details\
.aggregate(total=Sum('quantity'))['total']
@property
def total_amount(self):
'''
The total amount for a particular product with all its sizes
taken together.
'''
return self.item_details\
.aggregate(total=Sum('amount'))['total']