Je suis en train d'améliorer les performances de ce code:queryset équivalent de SQL
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
Essentiellement, je veux se débarrasser de la boucle « pour » parce que son lent. Je voudrais le faire en utilisant un seul jeu de requête si possible, mais je n'arrive pas à comprendre la syntaxe. Voici le SQL que je veux effectivement reproduire. Il crée une liste qui est assez court, je peux itérer que la recherche d'un match:
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));
Le « 4 » est le « contact » mentionné dans la première ligne de python.
Un grand merci, Thomas
BTW, je ne pense pas que votre exemple python correspond requête SQL. Êtes-vous sûr de 'return True'? – San4ez