указать группу по полю в Django 1.2 - PullRequest
3 голосов
/ 07 июня 2010

Я хочу использовать annotate для подсчета количества вхождений в моей модели, однако оно не использует правильное поле в группе по оценке. вместо того, чтобы использовать поле, которое я хочу (то есть поле, указанное в функции count), он использует первичный ключ модели. например,

ObjectHistory.objects.annotate(revisions=Count('resource'))

производит sql

SELECT *, COUNT(`resources_objecthistory`.`resource_id`) AS `revisions` FROM `resources_objecthistory` GROUP BY `resources_objecthistory`.`history_id`

где history_id - первичный ключ ObjectHistory

что я хочу это:

SELECT *, COUNT(`resources_objecthistory`.`resource_id`) AS `revisions` FROM `resources_objecthistory` GROUP BY `resources_objecthistory`.`resource_id

Я нашел это, поставив

ObjectHistory.objects.values.('resource').annotate(revisions=Count('resource'))

это поместило правильную группу по полю, но тогда у меня не было доступа к другим полям в модели.

Как указать использование resource_id в группе по полю?

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

используйте необработанный метод, как задокументировано здесь

например

ObjectHistory.objects.raw ("SELECT *, COUNT (resources_objecthistory. * 1009)*) AS revisions FROM resources_objecthistory GROUP BY resources_objecthistory .`resource_id ")

0 голосов
/ 07 июня 2010

Попробуйте:

    ObjectHistory.objects.values.('resource').\
    extra(select_params=('attribute1', 'attribute2'))\
    .annotate(revisions=Count('resource'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...