Итак, у меня есть таблица carts
и еще одна таблица cart_items
. Корзина связана с элементом корзины следующим образом (в псевдокоде).
cart: cart_id = 1
cart_item: id = 12, cart_id = 1, in_stock = False
cart_item: id = 13, cart_id = 1, in_stock = False
cart_item: id = 14, cart_id = 1, in_stock = False
Я хочу запросить все carts
, которые имеют хотя бы один cart_item со значением in_stock True.
cart: cart_id = 1
cart: cart_id = 2
cart_item: id = 12, cart_id = 1, in_stock = False
cart_item: id = 13, cart_id = 1, in_stock = False
cart_item: id = 14, cart_id = 1, in_stock = False
cart_item: id = 15, cart_id = 2, in_stock = True
cart_item: id = 16, cart_id = 2, in_stock = False
cart_item: id = 17, cart_id = 2, in_stock = False
Таким образом, с учетом этого набора данных будет возвращена корзина с cart_id = 2.
Кроме того, я должен упомянуть, что знаю, что мог бы запрашивать и извлекать все объекты, а затем работать над этим. список, чтобы отфильтровать все, что не соответствует этому требованию, но на самом деле мне нужно получить эти данные в форме запроса из-за того, как в этом веб-приложении обрабатывается нумерация страниц.
Если есть какой-то вид свойство, которое я мог бы определить в модели, как показано ниже, было бы идеально. Но я уверен, что это не работает в том виде, в каком оно есть.
@property
def cart_has_in_stock(self):
has_in_stock = False
for item in self.cart.items:
if item.in_stock:
has_in_stock = True
return has_in_stock
Я только что выяснил простой запрос SQL, который делает это, мне просто нужна помощь, чтобы перенести его в SQLAlchemy. Я не слишком хорош с SQLAlchemy.
Запрос: select * from cart_items where cart_items.cart_id IN (select cart.id from cart_items as item INNER JOIN carts AS cart on item.cart_id = cart.id where item.stage = 'stock' group by cart.id) \G;