Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django SQL的Queryset等价物_Django_Satchmo - Fatal编程技术网

Django SQL的Queryset等价物

Django SQL的Queryset等价物,django,satchmo,Django,Satchmo,我正在尝试改进此代码的性能: 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

我正在尝试改进此代码的性能:

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循环,因为它很慢。如果可能的话,我想使用一个queryset来完成,但我就是无法理解语法。下面是我想要复制的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第一行中提到的“联系人”

非常感谢,,
Thomas

这应该会生成与您类似的sql

product_ids = OrderItem.objects.filter(order__contact=contact).values_list('product_id', flat=True)
ProductVariation.objects.filter(product_id__in=product_ids)

顺便说一句,我不认为您的python示例与sql查询对应。你确定返回真值吗?谢谢San4ez!这就解决了我的问题:)我只需要做一些小的改变。它变成了:product\u id=OrderItem.objects.filter(order\u contact=contact)、values\u list('product',flat=True)和ProductVariation.objects.filter(product\u in=product\u id)我不知道为什么product\u id必须变成product,但它可以工作。