5

次のモデルがあります。

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'))

動作しません。Django クエリで .extra(select={...}) を使用して導入された値に .aggregate() を使用しますか? およびhttps://code.djangoproject.com/ticket/11671

動作する生の 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 で同じ結果を得るにはどうすればよいですか?

ご参考までに:

Item.objects.extra(select={"key": "content_item.data -> 'key'"})

に変換:

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

1 に答える 1

6

値と order_by を試しましたか?

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

このようなものは、PostgreSQL と Django 1.4 で機能します。

于 2012-09-21T01:17:24.850 に答える