Django ORM: как сделать мультиусловный фильтр по смежному полю? - PullRequest
0 голосов
/ 11 апреля 2019

Например, у нас есть эти модели:

  • Заказ (имя, ...)
  • Товар (заказ, наименование, а, б, в)

И я хочу исключить заказы, если все товары удовлетворяют условию (p.a > 0 or p.b > 0) and p.c == 0.

Что я пробовал до сих пор:

Order.objects.all().exclude(
    Q(products__a__gt=0)
    | Q(products__b__gt=0),
    products__c=0,
)

Но этот запрос отфильтрует заказы, если какое-либо из сопутствующих товаров удовлетворяет условию.

Решено это путем переключения логики от ВСЕХ к ЛЮБОМУ:

Order.objects.filter(user=user).filter(
    Q(products__c__gt=0)
    | Q(products__a=0, products__b=0)
)
...