Django 1.8 Условное выражение возвращает пустой набор запросов - PullRequest
1 голос
/ 28 июня 2019

У меня есть две модели, которые примерно такие:

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()
    ))
)

К сожалению, это возвращает пустой набор запросов. Удаление условия возвращает набор запросов как нормальный, но последняя аннотация, в частности, похоже, нарушает запрос.

Что не так?

...