4

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 ソリューションがあると便利です。

4

0 に答える 0