Проблема агрегатной функции Джанго (Count = -number-) - PullRequest
1 голос
/ 05 августа 2011
User
   id
   name
Device
   id
   name
   user-id
   is_enabled 

Я хочу выбрать всех пользователей, у которых

  1. Включено хотя бы одно устройство.
  2. Включено ровно 2 устройства
  3. Все устройства включены

    Примечание: включено означает (Device.is_enabled = 1)

Я знаю, что могу использовать аннотацию для получения количества устройств.Но как использовать annonate, чтобы получить количество пользователей, у которых есть ровно 2 включенных устройства,

В настоящее время я возлюсь с

User.objects.filter('device_set__is_enabled'=1)

Его список пользователей, у которых есть хотя бы одно включенное устройство,Не знаю, что делать дальше.

1 Ответ

1 голос
/ 05 августа 2011
from django.db.models import Count
User.objects.filter(device__is_enabled=1).annotate(
    device_count=Count('device')).filter(device_count=2)

User.objects.exclude(device__is_enabled=0)
...