Python Django ORM&;hstore:计算键的唯一值

Python Django ORM&;hstore:计算键的唯一值,python,django,postgresql,orm,hstore,Python,Django,Postgresql,Orm,Hstore,具有以下型号: from django_hstore import hstore from django.db import models class Item(VoteModel): data = hstore.DictionaryField(db_index=True) objects = hstore.HStoreManager() 比如: Item.objects.extra(select={"key": "content_item.data -> 'key'"

具有以下型号:

from django_hstore import hstore
from django.db import models

class Item(VoteModel):
    data = hstore.DictionaryField(db_index=True)
    objects = hstore.HStoreManager()
比如:

Item.objects.extra(select={"key": "content_item.data -> 'key'"}).aggregate(Count('key'))
不起作用,参见和

可用的原始SQL如下所示:

SELECT content_item.data -> 'key' AS key, count(*)  FROM content_item GROUP BY key;                                                                               
   key     | count 
-----------+-------
 value1    |   223
 value2    |    28
 value3    |    31
(3 rows)
如何通过Django的ORM获得相同的结果

供参考:

翻译为:

SELECT (content_item.data -> 'key') AS "key", "content_item"."id", "content_item"."data" FROM "content_item"

您是否尝试过使用值和顺序

Item.objects.extra(
    select=dict(key = "content_item.data -> 'key'")
).values('key').order_by('key').annotate(total=Count('key'))

类似的东西在PostgreSQL和Django 1.4中适用于我。

Ahaa,聪明,非常感谢!我知道我可以得到一个包含
值('key')
的列表,但尝试在其上使用
聚合也失败了。我必须花更多的时间来完全理解这些orm抽象是如何工作的:)@MaximeR:由于“管理”应用程序对orm的依赖性,我不得不接受它,但IMHO orm是Django框架中最薄弱的组件。我梦想有人用Flask、SQLAlchemy和Jinja2克隆Django admin应用程序。@AlexK:对我来说,
Django.contrib.admin
是一个杀手级应用程序(不是Django本身),我应该抽出一些时间,制作一个与任何特定ORM分离的克隆。
Item.objects.extra(
    select=dict(key = "content_item.data -> 'key'")
).values('key').order_by('key').annotate(total=Count('key'))