У меня есть две модели, которые примерно такие:
class Foo(models.Model):
# fields...
class Bar(models.Model):
foo = models.ForeignKey(Foo)
is_done = models.BooleanField()
# more fields....
Я хотел бы аннотировать Foo
подсчетом всех связанных Bar
объектов, для которых is_done
является истинным.
К сожалению, я попал в ловушку Django 1.8, поэтому Count('bar', filter='bar__is_done
) не вариант для меня.
Поэтому вместо этого я использовал условное агрегирование:
Foo.objects.all().annotate(
# other fields...
done=Count(Case(
When(bar__is_done=True, then=1),
output_field=IntegerField()
))
)
К сожалению, это возвращает пустой набор запросов. Удаление условия возвращает набор запросов как нормальный, но последняя аннотация, в частности, похоже, нарушает запрос.
Что не так?