如何在Django中进行“分组依据”查询?

时间:2019-11-05 03:30:24

标签: python django orm

我想使用Django ORM进行这样的查询

SELECT
    MAX(`product_item`.`order_value`) AS `max_order_value`,
    `product`.`title` AS `product_title`,
    `product`.`thumbnail_url` AS `product_thumbnail_url`,
    `product_item`.`title` AS `item_title`
FROM `product_item`
INNER JOIN `product` ON (`product_item`.`product_uid` = `product`.`product_uid`)
WHERE
(
    `product_item`.`state` = 'SALE'
    AND `product_item`.`hidden` = 'N'
    AND `product_item`.`latest` = 1
    AND `product`.`state` = 'SALE'
    AND `product`.`last_item_added_date` >= '2019-11-04 10:06:36.640586'
    AND `product`.`last_item_added_date` < '2019-11-04 10:26:36.640603'
)
GROUP BY `product_item`.`product_uid`;

然后我在下面尝试了一些代码。

ProductItem.objects
.filter(
    state="SALE",
    hidden="N",
    latest=1,
    product__state="SALE",
    product__last_item_added_date__gte=timezone.now() - timedelta(minutes=20),
    product__last_item_added_date__lt=timezone.now(),
)
.values("product__product_uid")
.annotate(max_order_value=Max("order_value"))
.annotate(
    product_title=F("product__title"),
    product_thumbnail_url=F("product__thumbnail_url"),
    item_title=F("title"),
)
.values(
    "max_order_value",
    "product_title",
    "product_thumbnail_url",
    "item_title",
)

但是我一直得到这样的结果,即我像这样在最近一次values()函数调用中编写的多个字段进行分组

SELECT
    MAX(`product_item`.`order_value`) AS `max_order_value`,
    `product`.`title` AS `product_title`,
    `product`.`thumbnail_url` AS `product_thumbnail_url`,
    `product_item`.`title` AS `item_title`
FROM `product_item`
INNER JOIN `product` ON (`product_item`.`product_uid` = `product`.`product_uid`)
WHERE
(
    `product_item`.`state` = 'SALE'
    AND `product_item`.`hidden` = 'N'
    AND `product_item`.`latest` = 1
    AND `product`.`state` = 'SALE'
    AND `product`.`last_item_added_date` >= '2019-11-04 10:06:36.640586'
    AND `product`.`last_item_added_date` < '2019-11-04 10:26:36.640603'
)
GROUP BY 
    `product_item`.`product_uid`, 
    `product`.`title`, 
    `product`.`thumbnail_url`, 
    `product_item`.`title`;

如何修复orm代码以使其正常工作? 谢谢

0 个答案:

没有答案