我有以下的(简化)型号:Django的分组查询
class Donation(models.Model):
entry_date = models.DateTimeField()
class Category(models.Model):
name = models.CharField()
class Item(models.Model):
donation = models.ForeignKey(Donation)
category = models.ForeignKey(Category)
我想显示的项目总数,每个类别由捐赠一年分组。
我已经试过这样:
Donation.objects.extra(select={'year': "django_date_trunc('year',
%s.entry_date)" % Donation._meta.db_table}).values('year',
'item__category__name').annotate(items=Sum('item__quantity'))
但我得到item__category__name
一个字段错误。
我也试过:
Item.objects.extra(select={"year": "django_date_trunc('year',
entry_date)"}, tables=["donations_donation"]).values("year",
"category__name").annotate(items=Sum("quantity")).order_by()
一般让我我想要的东西,但该项目的数量计数被捐赠记录的数量成倍增加。
任何想法?基本上我想显示此:
2010 - Category 1: 10 items - Category 2: 17 items 2009 - Category 1: 5 items - Category 3: 8 items
我在Django 1.1.1 - 应该提到这一点。我可以做“按类别划分的项目”查询,并在该主题中进一步回答,但我无法弄清楚该如何做的是在三个模型中进行 - 每个类别的项目按捐赠日期分组。这是我失去的第三个组成部分。 – Matt 2010-05-14 12:39:08
@matt django查询的目的是灵活的,但有时候你根本无法使用django查询来完成工作。在这种情况下,你可能会考虑使用直接的sql解决方案。在这一点上它可能会更具可读性。 http://docs.djangoproject.com/zh/dev/topics/db/sql/#topics-db-sql – dlamotte 2010-05-14 12:46:05
我很害怕这个。现在找出这个查询的原始SQL;) – Matt 2010-05-14 13:23:24