0

わかりました。Order、Product、OrderProduct という 3 つのテーブルがあります。Orders にある製品を見つけたいので、次の関数を作成しました。

def get_orders_with_products(products):
    if len(products) < 1:
        raise Exception("at least one product expected")

    query = get_order_set_query(products[0])

    if len(procducts > 1):
        for product in products[1:]:
            query = query & get_order_set_query(product)

    return Order.objects.filter(query)

def get_order_set_query(product):
    product_orders = OrderProduct.objects \
        .values_list('order_id', flat=True)\
        .filter(product=product)
    return Q(id__in=set(product_orders))

このコードは、次のような SQL クエリになります。

select * from Orders
where id in [1, 2, 3]
and id in [2, 3, 4]

Django の ORM に次のクエリを書かせる方法はありますか?

select * from Orders
where id in (select order_id from OrderProduct where product_id = 1)
and id in (select order_id from OrderProduct where product_id = 2)

これをより良くするための提案はありますか?

4

1 に答える 1