在构建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,但很高兴有一个跨数据库解决方案。