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