Получите в том же запросе количество активных и неактивных пользователей в django
У меня есть две модели
class User(AbstractUser):
...
class Agent(models.Model):
...
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="agent")
Я хочу иметь количество активных и неактивных пользователей в одном запросе.
Мой запрос:
Agent.objects.annotate(
actifs=Count(User.objects.values("id").filter("is_active")),
inactifs=Count(User.objects.values("id").filter("is_active=False")),
)
Не работает. Как я могу это сделать?
Вы можете работать с .aggregate(…)
[Django-doc], где мы используем [Count(…)
выражение [Django-doc]] с filter=…
параметром [Django-doc]:
from django.db.models import Count, Q
Agent.objects.aggregate(
actifs=Count('user', filter=Q(user__is_active=True)),
inactifs=Count('user', filter=Q(user__is_active=False))
)
Это вернет словарь с двумя записями: actifs
и inactifs
, например:
{ 'actifs': 25, 'inactifs': 14 }