Вы можете сделать что-то вроде этого:
reqs = Request.objects.values('movie', 'movie__rating', 'movie__title', 'movie__year', 'language').annotate(Count('language'))
print reqs
вот пример вывода:
[
{'movie__year': 2010, 'language': u'EN', 'movie__title': u'Foo', 'movie': 1, 'language__count': 1, 'movie__rating': Decimal('1')},
{'movie__year': 2010, 'language': u'ES', 'movie__title': u'Foo', 'movie': 1, 'language__count': 1, 'movie__rating': Decimal('1')},
{'movie__year': 2010, 'language': u'RU', 'movie__title': u'Foo', 'movie': 1, 'language__count': 1, 'movie__rating': Decimal('1')},
{'movie__year': 1998, 'language': u'EN', 'movie__title': u'Bar', 'movie': 2, 'language__count': 3, 'movie__rating': Decimal('9')},
{'movie__year': 1998, 'language': u'RU', 'movie__title': u'Bar', 'movie': 2, 'language__count': 1, 'movie__rating': Decimal('9')},
]
вы можете видеть, что возврат дополнительных атрибутов фильма не меняет счетчика, вотпример вывода из вашего исходного запроса:
reqs = Request.objects.values('movie', 'language').annotate(Count('language'))
print reqs
это производит вывод:
[
{'movie': 1, 'language__count': 1, 'language': u'EN'},
{'movie': 1, 'language__count': 1, 'language': u'ES'},
{'movie': 1, 'language__count': 1, 'language': u'RU'},
{'movie': 2, 'language__count': 3, 'language': u'EN'},
{'movie': 2, 'language__count': 1, 'language': u'RU'},
]
РЕДАКТИРОВАТЬ
Если вы хотите иметь возможность позвонитьметоды для фильма , затем вы хотите выбрать фильмы по вашему запросу, а не запросы :
movies = Movie.objects.annotate(num_lang=Count('request__language')).all()
Это вернет всефильмы, аннотированные количеством языков запроса, доступ к которым вы можете получить через свойство * num_lang * в фильме.Вы также сможете вызывать все методы объектов кино