我有点问题。
我有一个名为Customer的模型 我还有另外两个名为发票和付款的模型 现在,Invoice对客户是FK,付款是FK到发票
我想要一个查询,在那里我可以找出客户的余额。
我的发票模型包含以下字段:
invoice_id = models.CharField(blank=True, max_length=12)
total=models.DecimalField(max_digits=12, decimal_places=2)
grand_discount=models.DecimalField(max_digits=10, decimal_places=2)
customer=models.ForeignKey(Customer, related_name='salesInvoice_sales_master_customer')
我的付款方式如下:
invoice_no=models.ForeignKey(salesInvoice, related_name='salesPayment_sales_sales_salesInvoice')
amount_paid=models.DecimalField(max_digits=12, decimal_places=2)
collected_on=models.DateTimeField(null=True)
现在,我按如下方式调用Customer对象上的annotate:
customers = Customer.objects.for_tenant(request.user.tenant).annotate(total=
Sum('salesInvoice_sales_master_customer__total')\
-Sum('salesInvoice_sales_master_customer__grand_discount')\
-Sum('salesInvoice_sales_master_customer__salesPayment_sales_sales_salesInvoice__amount_paid'))
所有工作都在工作文件,直到最后一行(我通过删除销售付款的最后一个SUM来检查。即付款模式)。在进行此查询时,Django会对发票模型执行“双重”LEFT OUTER JOIN,因此总计和grand_discount会加倍。例如,总数为1000,grand_discount为100,amount_paid为500,查询显示总数为2000,grand_discount为200,amount_paid为500
除了RAW SQL(我的DB是postgresql)之外,还有什么方法可以解决这个问题吗?