私はこのコードのパフォーマンスを改善しようとしています:
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の最初の行で参照されている「連絡先」です。
どうもありがとう、トーマス