specify group by field in django 1.2
I want to use annotate to count the number of occurances in my model, however it is not using the right field in the group by statment. instead of using the field i want (i.e. the one specified in the count function) it uses the primary key of the model. e.g.
ObjectHistory.objects.annotate(revisions=Count('resource'))
produces sql
SELECT *, COUNT(`resources_objecthistory`.`resource_id`) AS `revisions` FROM `resources_objecthistory` GROUP BY `resources_objecthistory`.`history_id`
where history_id is the primary key of ObjectHistory
what I want is:
SELECT *, COUNT(`resources_objecthistory`.`resource_id`) AS `revisions` FROM `resources_objecthistory` GROUP BY `resources_objecthistory`.`resource_id
I found that by putting
ObjectHistory.objects.values.('resource'开发者_开发百科).annotate(revisions=Count('resource'))
it put the right group by field but then i didn't have access to the other fields in the model.
How do I specify to use resource_id in the group by field?
Try:
ObjectHistory.objects.values.('resource').\
extra(select_params=('attribute1', 'attribute2'))\
.annotate(revisions=Count('resource'))
use the raw method as documented here
e.g.
ObjectHistory.objects.raw("SELECT *, COUNT(
resources_objecthistory.resource_id) ASrevisionsFROMresources_objecthistoryGROUP BYresources_objecthistory.`resource_id")
加载中,请稍侯......
精彩评论