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

我想使用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_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代码以使其正常工作? 谢谢

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

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3162483.html

大家都在问