Я попробовал этот пример, и вам нужно объявить related_name
в вашей области:
class Component(models.Model):
parent = models.ForgeinKey(Type, related_name='components')
Это должно сделать это
UPDATE
На основании вашего примера:
>>> [(x.is_bulk, x.num_components) for x in Type.objects.annotate(num_components=Count('components'))]
[(False, 0), (False, 0), (False, 0), (False, 0), (False, 0), (False, 0), (False, 0)]
И мой:
>>> [(x.is_bulk, x.num_components) for x in Type.objects.annotate(num_components=Count('components'))]
[(False, 3), (False, 0), (False, 1), (False, 4), (True, 2), (True, 3), (True, 1), (True, 1), (False, 2), (True, 7), (True, 0), (False, 0)]
Я предполагаю, что у вас нет объектов с требованиями вашего набора запросов:
Type.objects.annotate(num_components=Count('components')).exclude(is_bulk=True, num_components=0)
Ваши результаты:
[]
Вот результаты в моем случае:
[<Type: Type object>, <Type: Type object>, <Type: Type object>, <Type: Type object>]