【发布时间】:2019-10-20 20:42:35
【问题描述】:
我在我的项目中做了以下信号:
@receiver(pre_save, sender=group1)
@disable_for_loaddata
def total_closing_group1(sender,instance,*args,**kwargs):
total_group_closing_deb_po = instance.master_group.filter(ledgergroups__Closing_balance__gte=0,balance_nature='Debit').aggregate(the_sum=Coalesce(Sum('ledgergroups__Closing_balance'), Value(0)))['the_sum']
total_group_closing_deb_neg = instance.master_group.filter(ledgergroups__Closing_balance__lt=0,balance_nature='Debit').aggregate(the_sum=Coalesce(Sum('ledgergroups__Closing_balance'), Value(0)))['the_sum']
total_group_closing_po_cre = instance.master_group.filter(ledgergroups__Closing_balance__gte=0,balance_nature='Credit').aggregate(the_sum=Coalesce(Sum('ledgergroups__Closing_balance'), Value(0)))['the_sum']
total_group_closing_neg_cre = instance.master_group.filter(ledgergroups__Closing_balance__lt=0,balance_nature='Credit').aggregate(the_sum=Coalesce(Sum('ledgergroups__Closing_balance'), Value(0)))['the_sum']
total_closing_deb_po = instance.ledgergroups.filter(Closing_balance__gte=0,group1_Name__balance_nature='Debit').aggregate(the_sum=Coalesce(Sum('Closing_balance'), Value(0)))['the_sum']
total_closing_deb_ne = instance.ledgergroups.filter(Closing_balance__lt=0,group1_Name__balance_nature='Debit').aggregate(the_sum=Coalesce(Sum('Closing_balance'), Value(0)))['the_sum']
total_closing_cre_po = instance.ledgergroups.filter(Closing_balance__gte=0,group1_Name__balance_nature='Credit').aggregate(the_sum=Coalesce(Sum('Closing_balance'), Value(0)))['the_sum']
total_closing_cre_ne = instance.ledgergroups.filter(Closing_balance__lt=0,group1_Name__balance_nature='Credit').aggregate(the_sum=Coalesce(Sum('Closing_balance'), Value(0)))['the_sum']
if total_group_closing_deb_po != None and total_group_closing_neg_cre != None and total_closing_deb_po != None and total_closing_cre_ne != None:
instance.positive_closing = total_group_closing_deb_po + abs(total_group_closing_neg_cre) + total_closing_deb_po + abs(total_closing_cre_ne)
if total_group_closing_po_cre != None and total_group_closing_deb_neg != None and total_closing_cre_po != None and total_closing_deb_ne != None:
instance.negative_closing = total_group_closing_po_cre + abs(total_group_closing_deb_neg) + total_closing_cre_po + abs(total_closing_deb_ne)
我的模型是:
class Group1(models.Model):
group_name = models.CharField(max_length=32)
master = models.ForeignKey("self",on_delete=models.CASCADE,related_name='master_group',null=True)
negative_closing = models.DecimalField(max_digits=10,default=0,decimal_places=2,null=True)
positive_closing = models.DecimalField(max_digits=10,default=0,decimal_places=2,null=True)
class Ledger1(models.Model):
name = models.CharField(max_length=32)
group1_name = models.ForeignKey(Group1,on_delete=models.CASCADE,null=True,related_name='ledgergroups')
closing_balance = models.DecimalField(default=0.00,max_digits=10,decimal_places=2,blank=True)
一开始它工作得很好,但是当我通过将数据放入字段来增加数据库的负载时突然之间。
它向我抛出了错误[<class 'decimal.InvalidOperation'>]。
这个错误意味着什么?
任何人都知道
谢谢
【问题讨论】:
-
code.djangoproject.com/ticket/24636 请阅读此主题。我认为这正是您所需要的。
-
是的,这是确切的解决方案,但是如何在不更改 django 项目中的内置文件的情况下安全地使用这个十进制验证器
-
negative_closing = models.DecimalField(max_digits=10,default=0,decimal_places=2,null=True)为您的十进制字段创建自定义验证器。 -
问题出在
max_digit和decimal_places吗?
标签: django django-models django-signals