Подсчитать по 2 моделям через FK / M2M, используя подзапрос в Django? - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь перебрать список моделей и включить количество моделей, которые находятся на расстоянии 2 моделей (подключенных через FK, затем M2M). Пример: веб-сайт, созданный для пользователей, публикующих информацию о местных достопримечательностях. Эти достопримечательности затем сортируются по городам. Затем на моей странице, где пользователи могут просматривать различные города, они могут видеть как количество достопримечательностей в каждом городе (я разобрался с этой частью), так и затем, сколько медиа было размещено на каждом аттракционе (это вот где я застрял).

Пример кода:

class City(models.Model)
     name = .modelsCharField...

class Attraction(models.Model)
     name = models.CharField...
     city = models.ForeignKey(City)

class Media(models.Model)
     upload = models.Imagefield
     attraction = models.ManyToManyField(Attraction)

Теперь у меня есть страница со списком всех городов, которые я хочу отобразить:

Город № 1 (12 аттракционов, 78 единиц мультимедиа) Я могу узнать количество аттракционов с помощью Attra_set, но не могу понять, как получить общее количество мультимедиа. не могу заставить его работать. Вот строки, которые я пробовал:

qs = City.objects.all()
qs = qs.annotate(pieces_of_media=Subquery(Media.objects.filter(attraction=OuterRef('pk')).values('attraction').annotate(pieces_of_media=Count('pk')).values('pieces_of_media')))

Это не приводит к ошибкам или чему-либо, но возвращаемые числа не точны, поэтому я не уверен, что он на самом деле делает. * Для справки мой окончательный код django будет выглядеть так:

{% for city in cities %}
     {{city.name}} - There are {{ city.attraction_set.count }} attractions with {{ ?media_count? }} pieces of associated media.
{% endfor %}

Справка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...