Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django annotate with defer仍然在group by中使用defer列名_Django_Group By_Annotate - Fatal编程技术网

Django annotate with defer仍然在group by中使用defer列名

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

在构建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_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