Аннотирование без использования Exists или SubQuery

У меня есть клиент, который использует Django 1.8. Хотя они будут переведены на последнюю версию, нам нужно выполнить некоторые запросы до их перехода, но, очевидно, мы не можем использовать Exists или OuterRef.

В нашем случае мы хотим аннотировать набор запросов. например

recordset = Question.objects.annotate( has_answers=Exists(Answers.objects.filter(question=OuterRef('pk'))) )

Есть ли обходной путь, чтобы сделать эквивалент приведенной выше аннотации. Что люди использовали в "старые времена"?

В 1.8 должно работать следующее, аннотируйте каждый вопрос количеством ответов, а затем используйте условное выражение для преобразования в булево

from django.db.models import Count, Case, When, BooleanField

Question.objects.annotate(
    num_answers=Count('answer')
).annotate(
    has_answers=Case(
        When(num_answers__gt=0, then=True),
        default=False,
        output_field=BooleanField()
    )
)

Вернуться на верх