Django发布保存信号未更新数据库

问题描述 投票:-2回答:2

我不明白为什么这个信号不起作用。相同的代码可以工作一次,但是之后我从admin中删除了对象,然后再次运行它,然后它停止工作。

@receiver(post_save, sender=FinancePending)
def calcualate_FinancePending(sender, instance, created, **kwargs):
amount_paid = FinancePending.objects.values_list('amountPaid', flat=True)
amount_paid = list(amount_paid)
total_amount = FinancePending.objects.values_list('TotalAmount', flat=True)
total_amount = list(total_amount)

# total - paid
TotalFee = [int(s.replace(',', '')) for s in total_amount]
AmountPaid = [int(s.replace(',', '')) for s in amount_paid]
finance_pending = FinancePending.objects.all()
i = 1

while i <= len(TotalFee):
    amount_pending = TotalFee[i-1] - AmountPaid[i-1]
    amountpending = FinancePending.objects.filter(invoiceNumber=i)
    amountpending.AmountPending = amount_pending
    i = 1 + i
python django django-models django-signals
2个回答
1
投票

您没有调用save()方法,这就是为什么它没有保存的原因。但是我认为这并不是Django的最佳实现。您可以使用update()

这样简单地尝试
update()

而且,更新每个对象都没有意义,创建了from django.db.models import F @receiver(post_save, sender=FinancePending) def calcualate_FinancePending(sender, instance, created, **kwargs): FinancePending.objects.update(AmountPending=F('TotalAmount')-F('amountPaid')) 的一个实例。可能您应该只更新创建的对象。像这样:

FinancePending

最后,在命名属性和函数名称时,请遵循@receiver(post_save, sender=FinancePending) def calcualate_FinancePending(sender, instance, created, **kwargs): instance.AmountPending=instance.TotalAmount-instance.amountPaid instance.save()


0
投票

因为仅在调用save()方法之后才触发信号pep8 style guide。您应该改用post_save

© www.soinside.com 2019 - 2024. All rights reserved.