将前保存信号更改为后保存?Django

将前保存信号更改为后保存?Django,django,django-models,django-signals,Django,Django Models,Django Signals,这是我的模型: 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,blan

这是我的模型:

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)
我已经在我的预保存信号中这样做了:

@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
我想将前保存信号更改为后保存信号

我如何做到这一点?我必须对函数进行哪些更改

有什么想法吗


谢谢

,因为在调用实例保存方法后,它会被操作。您需要再次调用它以保存更改。但是为了防止保存递归,您需要使用update方法而不是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)

总值为“无”现在我已编辑了最后一行,请尝试此更改。我希望它能起作用。如果没有,请在计算后尝试打印总计,以查看其计算是否正确。这意味着计算错误,它以前工作过吗?我的意思是总数计算正确了吗?是的,在重新启动我的服务器后,它工作得非常好。谢谢@Sergey Pugach'