5
唯一值具有以下型號:Django的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'"}).aggregate(Count('key'))
不起作用,參見Using .aggregate() on a value introduced using .extra(select={...}) in a Django Query?和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興田得到同樣的結果?
FYI:
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"
阿哈,聰明,非常感謝!我知道我可以用'values('key')'獲得一個列表,但是也沒有試圖使用'aggregate'。我將不得不花費更多的時間來完全理解這些ORM抽象如何工作:) –
@MaximeR:由於ORM的「管理」應用程序依賴性,我不得不吞下它,但恕我直言,ORM是最弱的組件Django框架。我夢想有人用Flask,SQLAlchemy和Jinja2克隆Django管理員應用程序。 –
@AlexK:對我來說''django.contrib.admin'是一個殺手級的應用程序(不是Django本身),我應該騰出一些時間,讓一個克隆與任何特定的ORM解耦。 –