Фильтр модели Django на основе булевого поля

У меня есть пользовательская модель, которая имеет такие поля,

is_active = models.BooleanField()
date_joined = models.DateTimeField(auto_now_add=True)
resigned_date = models.DateTimeField(blank=True, null=True)

Где resigned_date будет None, если is_active поле будет True. Если поле is_active будет False, то в поле resigned_date будет дата. Я думаю, что могу объяснить это.

Я хочу запросить набор пользователей на основе некоторых DATE и is_active полей.

Более четко я хочу получить список сотрудников, которые (являются active и joined_date меньше или равны текущей дате) и (не являются active и resigned_date больше текущей даты)

Запрос, который я написал на данный момент:

users = user_models.User.objects.filter(
                Q(
                     is_active=True,
                     date_joined__month__lte=month,
                     date_joined__year__lte=year,
                 )
              & Q(
                     is_active=False,
                     resigned_date__month__gt=month,
                     resigned_date__year__gt=year,
                 )
            )

Но это не работает. Он не возвращает ни одного пользователя.

<

Как я могу этого достичь?

Мне удалось сделать это с помощью следующего метода:

all_users = user_models.User.objects.filter(
                branch_id=branch_id
            )

active_users = all_users.filter(
                is_active=True,
                date_joined__month__lte=month,
                date_joined__year__lte=year,

            )
inactive_users = all_users.filter(
                is_active=False,
                resigned_date__month__gt=month,
                resigned_date__year__gte=year,
            )
users = list(chain(active_users, inactive_users))

Я не знаю, является ли это единственным методом или есть какие-то более эффективные методы.

Любое улучшение будет оценено по достоинству.

Вернуться на верх