Django GROUP_BY到.annotate()

时间:2012-02-26 14:44:43

标签: python django django-orm

我的表invoices包含字段customer_id和其他一些字段。我需要每个用户选择的购买次数。在SQL中它应该是这样的:

SELECT username, COUNT('customer_id') FROM `invoices`
LEFT JOIN `auth_user` ON `auth_user`.id =  `invoices`.customer_id
GROUP BY `customer_id`, username

在Django中我尝试:

Invoice.objects.annotate(buy_count=Count('customer')).all()

但是此代码按invoices.id而不是invoices.customer_id进行分组并返回错误的结果。

1 个答案:

答案 0 :(得分:1)

我认为你应该扭转它,例如:

Customer.objects.annotate(buy_count=Count('invoice')).all()

在那里,您将获得一份客户名单及其发票数。