SQLクエリを作成するときに(または)を考慮annotate()
していないようです。これはバグですか、それとも何らかの理由でこのように構築されたのですか?defer()
only()
モデル:
class Item(models.Model):
a_number = models.PositiveIntegerField()
a_string = models.CharField(max_length=100)
a_date = models.DateField()
クエリセット:
Item.objects.defer(
'a_number',
'a_date'
).filter(
a_date__lte=datetime.date.today()
).annotate(
number_sum=Sum('a_number')
).order_by("-number_sum")
クエリ:
SELECT "app_item"."a_string", SUM("app_item"."a_number") AS "number_sum"
FROM "app_item"
WHERE "app_item"."a_date" <= 2012-10-03
GROUP BY "app_item"."id", "app_item"."a_number", "app_item"."a_date", "app_item"."a_string" ORDER BY "number_sum" DESC
私は期待していました:
SELECT "app_item"."a_string", SUM("app_item"."a_number") AS "number_sum"
FROM "app_item"
WHERE "app_item"."a_date" <= 2012-10-03
GROUP BY "app_item"."id", "app_item"."a_string" ORDER BY "number_sum" DESC
使用できることはわかっていますvalues()
が、モデル インスタンスが必要です。
「app_item」を削除したいので、列ごとにグループを削除する簡単な方法があるかもしれません。「id」からグループ化も同様ですか?
今のところ raw を使用しますが、クロス db ソリューションがあると便利です。