Изменение сигнала pre_save на post_save? Django - PullRequest
0 голосов
/ 17 декабря 2018

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

class Purchase(models.Model):
  Total_Purchase = models.DecimalField(max_digits=10,decimal_places=2,blank=True, null=True)


class Stock_Total(models.Model):
    purchases   = models.ForeignKey(Purchase,on_delete=models.CASCADE,null=True,blank=False,related_name='purchasetotal') 
    stockitem   = models.ForeignKey(Stockdata,on_delete=models.CASCADE,null=True,blank=True,related_name='purchasestock') 
    Total_p     = models.DecimalField(max_digits=10,decimal_places=2,null=True,blank=True)

Я сделал это в своем сигнале pre_save:

@receiver(pre_save, sender=Purchase)
def user_created1(sender,instance,*args,**kwargs):
        total = instance.purchasetotal.aggregate(the_sum=Coalesce(Sum('Total_p'), Value(0)))['the_sum']
        instance.Total_Purchase = total

Я хочу изменить сигнал pre_save на сигнал post_save ..

Как мне это сделать? И какие изменения я должен внести в функцию?

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 17 декабря 2018

Поскольку он работает после вызова экземпляра save, вам нужно вызвать его снова, чтобы сохранить изменения.Но вам нужно использовать метод update вместо save, чтобы предотвратить save рекурсию.

@receiver(post_save, sender=Purchase)
def user_created1(sender,instance, created=False, *args,**kwargs):
    total = instance.purchasetotal.aggregate(the_sum=Coalesce(Sum('Total_p'), Value(0)))['the_sum']
    Purchase.objects.filter(pk=instance.pk).update(Total_Purchase=total)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...