Django: Как получить аннотации вместо внешних ключей? - PullRequest
7 голосов
/ 18 апреля 2011

Annotate на внешний ключ возвращает внешние ключи.Как я могу получить сами объекты из запроса?В следующем примере the_user является внешним ключом в модели голосования:

Vote.objects.values('the_user').annotate(vote_count=Count('the_user')).order_by('-vote_count')

Возвращается

[{'the_user': 4, 'vote_count': 12} , {'the_user': 6, 'vote_count': 2}]

Но мне нужны сами объекты пользователя. Неидентификаторы

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

values() делает именно это - возвращает значения, использует обычный набор запросов

Vote.objects.annotate(vote_count=Count('the_user')).order_by('-vote_count')

Тогда каждый объект в этом наборе запросов будет иметь атрибут vote_count.

0 голосов
/ 27 июня 2016

Вы должны всегда запрашивать у модели, какие объекты вы хотите получить в результирующем наборе запросов, поэтому в вашем случае:

qs = User.objects.annotate(vote_count=Count('vote')).order_by('-vote_count')
0 голосов
/ 18 апреля 2011

Причина, по которой вы получаете внешний ключ, а не пользовательские объекты, заключается в том, что вы используете values ​​(), значения возвращают dict, а не объект модели. Используйте select_related вместо значений, и это решит вашу проблему.

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