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

嘿伙计们,我尝试从我的数据库表中计算重复/多个术语,但我仍然得到{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 中,您不能仅在一个查询中执行此操作,您需要一个子查询。我想这和 Django 一样,所以试试这个:

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

它应该为 ee 中的每个术语添加一个计数属性,其中包含行数。它对主查询中的相同关系应用子查询。它相当于 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 回答