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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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