2016-06-16 3 views
0

В моем приложении django (1.8) У меня есть модель TeamMember, которая имеет логическое поле primary_contact и отношение внешнего ключа к User. Я хотел бы найти набор объектов User, у которых нет TeamMember с primary_contact=True. (TeamMembers с primary_contact=False отлично)Аннотировать запрос с количеством фильтрованных связанных объектов

Я могу получить количество членов команды достаточно легко:

User.objects.annotate(teammember__count=Count('teammember')) 

И я могу упреждающий primary_contact TeamMembers достаточно легко, а также:

User.objects.prefetch_related(Prefetch('teammember_set', queryset=.objects.filter(primary_contact=True), to_attr='primary_contacts')) 

Однако я не нашли заклинание, позволяющее мне фильтровать запрос на «Пользователи, у которых нет членов команды primary_contact».

Очевидно, что я хотел бы сделать это в ORM, сводя к минимуму запросы и без необработанного SQL, если это возможно.

ответ

1

Я мог бы неправильно понять ваш вопрос, но будет ли это работать?

User.objects.filter(Q(teammember__primary_contact=False) | 
        Q(teammember__isnull=True)) 
+0

Интересно, мне не пришло в голову, что орм django разрешил бы такой запрос. Это не совсем то, что я искал, но это меня намного ближе. 'User.objects.exclude (Q (teammember__primary_contact = True))') выглядит многообещающим. Благодаря! –

Смежные вопросы