Аннотирование и сравнение 2 подсчетов для результатов подзапроса
Я пытаюсь получить 2 подсчета связанной таблицы для сравнения, чтобы я мог вывести различные коды состояния на основе этого сравнения.
Проблема в том, что я не могу получить более одного подсчета, так как count
сам нетерпеливо оценивает запрос, и я получаю ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.
Это запрос modelmanager:
class SuccessCode(Enum):
SUCCESS = "Success"
PARTIAL = "Partial"
FAILURE = "Failed"
completed = MyModel.objects.filter(
backup=OuterRef("pk")
).completed()
unsuccessful = (
MyModel.objects.filter(backup=OuterRef("pk"))
.completed()
.filter(model_field__isnull=False)
)
return (
self.active()
.annotate(complete=Subquery(completed.count()))
.annotate(unsuccessful=Subquery(unsuccessful.count()))
.annotate(
success=Case(
When(
complete=F("unsuccessful"),
then=Value(SuccessCode.FAILURE),
),
When(unsuccessful=0, then=Value(SuccessCode.SUCCESS)),
default=Value(SuccessCode.PARTIAL),
)
)
)
Так что мне нужно 2 подсчета - завершенные и неуспешные (неуспешные по определению будут подмножеством завершенных - где угодно от 0 до всех завершенных записей). Затем мне нужно сравнить эти значения.
Есть советы?