У меня есть модель Media, которая имеет отношение к модели UserMedia (рейтинги пользователей).Также существует модель под названием UserMatchScore (количество совпадений пользователей), которая имеет отношение к вопросу.
В представлении, которое я запрашиваю таблицу Media, в этом представлении есть возможность получить только те носители, которые имеют мои совпаденияоценил, но я не оценил.Кроме того, среднее количество оценок возвращается на основе подмножества меня и моих матчей, а не всех пользователей, которые оценили СМИ.Я делаю это с аннотацией.
Что я делаю, так это фильтрую таблицу Media по элементам, которые я не оценил, но мои совпадения оценили, это просто, но это только половина работы.Возвращаются все медиафайлы, которые я не оценил, но мои совпадения оценили, но реляционное поле UserMedia по-прежнему содержит все рейтинги, этот не фильтруется, поэтому нет способа рассчитать среднее значение оценок для подмножества моих совпадений.,Вот запрос, который я описываю:
queryset = models.Media.objects
queryset = queryset.filter(
Q(usermedia__user__id__in=my_matches) & ~Q(usermedia__user=user)
)
Единственный способ получить ожидаемый результат - выполнить цикл по набору запросов и отфильтровать каждый элемент отношения UserMedia, но это слишком медленно, поэтому должно бытьсделано с запросом БД.
for el in queryset:
el.usermedia_set.filter(~Q(user=user)).filter(user=my_matches)
Кто-нибудь знает, как это сделать с Django ORM?