我正在尝试提高此代码的性能:
orderitems = OrderItem.objects.filter(order__contact=contact)
for orderitem in orderitems:
try:
pv = ProductVariation.objects.get(product=orderitem.product)
if pv.parent_id == parent_product.id:
return True
except:
pass
基本上我想摆脱'for'循环,因为它很慢。如果可能的话,我想使用单个查询集来完成它,但我无法理解语法。这是我有效想要重现的SQL。它创建了一个相当短的列表,因此我可以遍历查找匹配项:
SELECT parent_id
FROM configurable_productvariation
WHERE product_id IN (
SELECT product_id
FROM shop_orderitem
WHERE order_id
IN (
SELECT id
FROM shop_order
WHERE contact_id = 4));
'4'是python第一行中提到的'contact'。
非常感谢, 托马斯
答案 0 :(得分:0)
这应该生成像你这样的sql
product_ids = OrderItem.objects.filter(order__contact=contact).values_list('product_id', flat=True)
ProductVariation.objects.filter(product_id__in=product_ids)