1
class Term(models.Model):
    created = models.DateTimeField(auto_now_add=True)   
    term = models.CharField(max_length=255)             

やあみんな、db テーブルから重複/複数の用語をカウントしようとしましたが{term: a, count: 1, term: a, count: 1,term: b, count: 1,...}、テーブルのすべてのアイテム ( ) のリストをまだ取得していて、好きではありません{term: a, count: 12, term: b, count: 1}

誰かアイデアはありますか?

編集:

ee = Term.objects.annotate(Count("term")).values("term", "term__count")

結果:

[{'term': u'tes', 'term__count': 1}, {'term': u'tes', 'term__count': 1}, 

私が期待したこと:

[{'term': u'tes', 'term__count': 2},  {'term': 'b', 'term__count': 1}
4

2 に答える 2

2

https://docs.djangoproject.com/en/dev/topics/db/aggregation/ は、順序が重要であると述べています。また、モデルに order_by がある場合、それが影響します。どうですか...

ee = Term.objects.values("term").annotate(Count("term")).order_by()
于 2013-07-31T17:22:59.137 に答える
0

SQL では、1 つのクエリだけでそれを行うことはできません。サブクエリが必要です。Djangoでも同じだと思うので、これを試してください:

ee = Term.objects.extra(select={'count': "SELECT COUNT(term) FROM appname_term AS subtable WHERE subtable.term = appname_term.term"})

ee からのすべての用語に、これで行数を持つ count 属性を追加する必要があります。メインクエリの同じリレーションにサブクエリを適用します。これは SQL に相当します。

SELECT *, (
    SELECT COUNT(term) 
    FROM appname_term AS subtable
    WHERE subtable.term = appname_term.term
) AS count
FROM appname_term
于 2013-07-31T16:40:29.750 に答える