在django 1.2中按字段指定

时间:2010-06-07 14:01:14

标签: django django-queryset

我想使用annotate来计算模型中的出现次数,但是它没有按照法规使用组中的右侧字段。而不是使用我想要的字段(即计数函数中指定的字段),它使用模型的主键。 e.g。

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 :(得分:0)

尝试:

    ObjectHistory.objects.values.('resource').\
    extra(select_params=('attribute1', 'attribute2'))\
    .annotate(revisions=Count('resource'))

答案 1 :(得分:0)

使用记录为here

的原始方法

e.g。

  

ObjectHistory.objects.raw(“SELECT *,   COUNT(resources_objecthistoryresource_id)   AS revisions FROM   resources_objecthistory GROUP BY   resources_objecthistory。`RESOURCE_ID“)