django 从带条件的模型中得到两类集合

5vf7fwbs  于 2022-12-05  发布在  Go
关注(0)|答案(1)|浏览(128)

我想从模型中得到贷项和借项,有条件地尝试了很多方法,但都没有接近答案,我正在研究的模型是

class SupplierTrans(models.Model):
    supplierName = models.ForeignKey(Supplier, on_delete = models.CASCADE)
    paid = models.BooleanField(default=True)
    amount = models.IntegerField()
    remarks = models.CharField(max_length = 200)
    created = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-update', '-created']

    def __str__(self):
        return str(self.supplierName)
    
    @property
    def paid_purchsased(self):
        return 'Paid' if self.paid == True else "Purchased"

我的方法是

sup = SupplierTrans.objects.annotate( credit = Sum('amount', paid=True), debit= Sum('amount', paid=False)).order_by('supplierName__name')

但如果不过滤布尔值,它不起作用,结果是得到表中所有金额的总和
但所需的是通过以下方法得到的

credit_amt = SupplierTrans.objects.filter(paid=True).aggregate(Sum('amount'))
debit_amt = SupplierTrans.objects.filter(paid=False).aggregate(Sum('amount'))

我想在上述条件下得到下面的值有没有什么办法,或者应该改变表的结构

nfs0ujit

nfs0ujit1#

我知道您希望获得已付和未付记录的合计。下面的查询应该可以完成这项工作:

SupplierTrans.objects.values('paid').annotate(total_amount=Sum('amount'))

相关的Django文档-https://docs.djangoproject.com/en/4.0/topics/db/aggregation/#values

相关问题