django 按列计算行数

django count rows by column

我有这样的模型

class tbl_invoice(models.Model):
    invoice_id                      = models.IntegerField(blank=True, null=True)
    client_id                       = models.ForeignKey(tbl_customer, on_delete=models.CASCADE)
    invoice_number                  = models.IntegerField(blank=True, null=True)
    date                            = models.DateField(blank=True, null=True)
    total_amount                    = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
    total_tax                       = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
    discount                        = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
    paid_amount                     = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
    balance                         = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)

一个客户显然可以有多个发票,我想在 table

中根据客户显示所有发票

喜欢

Customer           Total Invoices            Total Amount        Total Tax

Client1                  10                      50000              200
Client2                   8                      10000              500

我试过了

tbl_invoice.objects.values('client_id').order_by().annotate(Count('client_id'))

但这给出了

<QuerySet [{'client_id': 19, 'client_id__count': 5}, {'client_id': 21, 'client_id__count': 10}, {'client_id': 24, 'client_id__count': 15}]>

这确实给出了行数,但我怎样才能获得其他数据??

抱歉,如果这是重复的,但我无法理解这个简单的查询。

您必须计算发票编号。试试这个:

tbl_invoice.objects.values('client_id').order_by().annotate(Count('invoice_id'), Sum('total_amount'), Sum('total_tax'))

而不是这个

tbl_invoice.objects.values('client_id').order_by().annotate(Count('client_id'))