我有以下的(簡化)型號: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