Фильтрация на основе .count() поля forgein key в наборах запросов Django

#django #orm #django-queryset #django-orm

#django #orm #django-набор запросов #django-orm

Вопрос:

Итак, у меня есть несколько моделей Django 1.3, подобных этой:

 class Type(models.Model):
  is_bulk = models.BooleanField()

class Component(models.Model):
  parent = models.ForeignKey(Type)
  

У некоторых Type есть 0 Component , у некоторых есть 1 или 2 и т.д. Как мне написать набор запросов, который фильтрует все типы, содержащие > 0 компонентов. т. Е. исключает типы, содержащие 0 компонентов?

Ответ №1:

 from django.db.models import Count
Type.objects.annotate(component_count=Count('component')).exclude(component_count=0)