Django: аннотировать запрос одной модели с количеством различных несвязанных моделей, которые фильтруются по полю первойPython

Программы на Python
Anonymous
Django: аннотировать запрос одной модели с количеством различных несвязанных моделей, которые фильтруются по полю первой

Сообщение Anonymous »

Коротко о длинном заголовке: мне нужно работать со сложным запросом аннотаций.
Примеры моделей:

Код: Выделить всё

class FirstModel(models.Model):
master_tag = models.CharField()
... other fields

class SecondModel(models.Model):
ref_name = models.CharField()
Я хочу получить все объекты из FirstModel с подсчетом всех объектов из SecondModel, если ref_name этих объектов совпадает с master_tag из Объект FirstModel.
Что я пробовал:
Я пытался использовать аннотацию с Subquery и OuterRef, но не смог заставить это работать из-за постоянных ошибок.< /p>

Код: Выделить всё

from django.db.models import OuterRef, Subquery, Count

sub_query = Subquery(
SecondModel.objects.filter(ref_name=OuterRef("master_tag")).values_list("pk", flat=True)
)
FirstModel.objects.annotate(sm_count=Count(sub_query))
Это дало мне ошибку: «django.db.utils.ProgrammingError: более одной строки, возвращенной подзапросом, используемым в качестве выражения».
Я пробовал много других вещей, один из который помещает ".count()" в конец подзапроса, но это вызывает другую ошибку, поскольку count пытается быстро оценить запрос и терпит неудачу из-за OuterRef.
Итак, есть ли способ получить такой запрос с аннотацией счетчика? Какие-нибудь глупые ошибки я допустил при написании запроса выше?

Подробнее здесь: https://stackoverflow.com/questions/781 ... d-model-wh

Вернуться в «Python»