Django annotate with defer仍然在group by中使用defer列名
在构建sql查询时,Django annotate with defer仍然在group by中使用defer列名,django,group-by,annotate,Django,Group By,Annotate,在构建sql查询时,annotate()似乎没有考虑defer()(或only())。这是一个bug还是它这样构建是有原因的 型号: class Item(models.Model): a_number = models.PositiveIntegerField() a_string = models.CharField(max_length=100) a_date = models.DateField() 查询集: Item.objects.defer( 'a
annotate()
似乎没有考虑defer()
(或only()
)。这是一个bug还是它这样构建是有原因的
型号:
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
选择“app\u item”、“a\u string”、SUM(“app\u item”、“a\u number”)作为“number\u SUM”
从“应用程序项目”
如果您使用的是来自django.db.models.expressions
(如RawSQL
)的特殊表达式,则可以覆盖它们并为get\u group\u by\u cols()返回不同的值。我认为其他查找也可能有类似的功能。
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