Джанго сложный запрос для ИЛИ - PullRequest
0 голосов
/ 24 мая 2018

Я использую django 1.10

Я создал этот запрос, который работает для меня:

filters_qs = filters_qs.filter(
    Q(
        user__in=[cache.user for cache in caches],
        status_id__in=[Status.Open['id'], Status.Empty['id']],
        revision=0
    ) |
    Q(
        user=None,
        status_id__in=[Status.Open['id'], Status.Empty['id']],
        revision=0
    )
)

Я использовал 'ИЛИ', потому что я ищу результат, гденабор запросов отсутствует или находится в списке.Но - это выглядит не так "питонно" ... он повторяет тот же код для незначительных изменений.Есть ли другой способ?например, что-то вроде - (не работает)

Q(
  user__in=[cache.user for cache in caches] + [None],
  status_id__in=[
      Status.Open['id'],
      Status.Empty['id']
      ],
  revision=0
  )

Спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Вы должны использовать поиск isnull для проверки значения None.Попробуйте это:

filters_qs.filter(
    Q(user__in=map(lambda item: item.user, caches)) |
    Q(user__isnull=True),
    status_id__in=[
        Status.Open['id'],
        Status.Empty['id']
    ],
    revision=0
)
...