Джанго: Могу ли я выполнить два сигнала предварительного сохранения для одной и той же операции? - PullRequest
0 голосов
/ 12 октября 2018

Можно ли выполнить два сигнала предварительного сохранения в django для одной и той же операции, только отправитель будет отличаться в обоих случаях ...

Это мои модели:

   class Ledger1(models.Model):
        creation_Date = models.DateField()
        name = models.CharField(max_length=32)
        group1_Name = models.ForeignKey(Group1,on_delete=models.CASCADE,blank=True,null=True)
        Opening_Balance = models.DecimalField(max_digits=19,decimal_places=2,blank=True)
        Closing_balance = models.DecimalField(max_digits=10,decimal_places=2,blank=True,null=True)

   class Journal(models.Model):
        Date = models.DateField()
        By = models.ForeignKey(Ledger1,on_delete=models.CASCADE,related_name='Debitledgers')
        To = models.ForeignKey(Ledger1,on_delete=models.CASCADE,related_name='Creditledgers')
        Debit = models.DecimalField(max_digits=10,decimal_places=2)
        Credit = models.DecimalField(max_digits=10,decimal_places=2)

И этоЯ сделал ранее:

@receiver(pre_save, sender=Ledger1)
def update_user_closing_balance(sender,instance,*args,**kwargs):
    debit = instance.Debitledgers.aggregate(debit=Sum('Debit'))['debit']
    credit = instance.Creditledgers.aggregate(credit=Sum('Credit'))['credit']
    instance.Closing_balance = instance.Opening_Balance + debit - credit

Я хочу сделать аналогичный сигнал предварительного сохранения, но отправителем будет журнал ... И могу ли я иметь два сигнала для одной и той же функциональности в django?

Я хочу сказать, что при обновлении бухгалтерской книги автоматически обновляется итоговый баланс, что я уже сделал ...

Но я также хочу сделать что-то вроде обновления журнала, тогда и итоговый баланс будетобновлено ...

Кто-нибудь знает это?

1 Ответ

0 голосов
/ 12 октября 2018

Это вызовет предварительное сохранение для связанных моделей Ledger1

from django.db.models.signals import post_save
@receiver(post_save, sender=Journal)
def trigger_pre_save(sender, instance, *args, **kwargs):
        instance.By.save()  # trigger pre_save for By Ledger
        # or
        # post_save.send(Ledger1, instance=instance.By, created=False)
        instance.To.save() # trigger pre_save for To Ledger
        # or
        # post_save.send(Ledger1, instance=instance.To, created=False)
...