将pre_save信号更改为post_save?

时间:2018-12-17 10:52:26

标签: django django-models django-signals

这是我的模特

BDI100                 172.20.1.5      YES TFTP   up                    up

我已经在pre_save信号中完成了此操作:

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)

我想将保存前的信号更改为保存后的信号。

我该怎么做?我必须对该功能进行哪些更改?

有什么主意吗?

谢谢

1 个答案:

答案 0 :(得分:1)

由于它是在实例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)