Фильтр модели 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))
Я не знаю, является ли это единственным методом или есть какие-то более эффективные методы.
Любое улучшение будет оценено по достоинству.