В Django триггер post_save после создания связанного объекта? - PullRequest
0 голосов
/ 24 января 2020

Я использую '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']
...