Django with defer注释仍然使用group by中的延迟列名

时间:2012-10-03 21:42:55

标签: django group-by annotate

在构建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”fom group by?

我现在要使用raw,但很高兴有一个跨数据库解决方案。

0 个答案:

没有答案