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}
答案 0 :(得分:2)
https://docs.djangoproject.com/en/dev/topics/db/aggregation/ 说顺序很重要。此外,如果您在模型上有order_by,则会影响它。 怎么样......
ee = Term.objects.values("term").annotate(Count("term")).order_by()
答案 1 :(得分:0)
在SQL中,您不能只在一个查询中执行此操作,而是需要子查询。我猜这与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