3 ИЛИ условия в одном фильтре наборов запросов - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь использовать 3 или операторы в одном фильтре, но это не работает.

cart = carts.filter(Q(status='completed') | Q(status='paid') | Q(status='started'))

Знаете ли вы, каков правильный синтаксис?

Спасибо!

1 Ответ

0 голосов
/ 20 января 2019

То, что вы имеете, правильно:

cart = carts.filter(Q(status='completed') | Q(status='paid') | Q(status='started'))

Вы можете просто использовать in:

cart = carts.filter(status__in=['completed', 'paid', 'started'])


Когда вы говорите, что это не работает, я предполагаю, что вы не получаете никаких результатов.Вам следует: * проверить фактические status значения, которые вы имеете в БД, и те, что находятся в вашем предварительно отфильтрованном списке carts:

set(Cart.objects.values_list('status', flat=True))    # full list of statuses
set(carts.values_list('status', flat=True))    # statuses for your pre-filter

Также рассмотрите возможность использования констант для ваших статусов (вместостроки).

...