可以说,如果我有一个包含很多字段的模型,但我只关心一个charfield。可以说charfield可以是任何东西,所以我不知道可能的值,但是我知道值经常重叠。所以我可以有20个带有“abc”的对象和10个带有“xyz”的对象,或者我可以有50个带有“def”的对象以及80个带有“stu”的对象,而我有40000个没有重叠的对象,我真的不在乎。

如何有效地计算对象?我想返回的是这样的:

{'abc':20,'xyz':10,'other':10,000}

或类似的东西,不进行大量的SQL调用。

编辑:

我不知道是否有人会看到这个,因为我正在编辑它,但是...

我有这个模型:

Action(models.Model)类:
作者= models.CharField(max_length = 255)
purl = models.CharField(max_length = 255,null = True)

从答案中,我做到了:

组= Action.objects.filter(author ='James')。values('purl')。annotate(count = Count('purl'))

但...

这是什么组:

{“purl”:“waka”},{“purl”:“waka”},{“purl”:“waka”},{“purl”:“waka”},{“purl”:“mora”}, {“purl”:“mora”},{“purl”:“mora”},{“purl”:“mora”},{“purl”:“mora”},{“purl”:“lora”}

(我只是用虚数值填充了purl)

我想要的是

{'waka':4,'mora':5,'lora':1}

希望有人会看到此编辑...

编辑2:

显然我的数据库(BigTable)不支持Django的聚合函数,这就是为什么我遇到所有问题的原因。

最佳答案

您想要类似于“计数...分组依据”的内容。您可以使用Django ORM的聚合功能来做到这一点:

from django.db.models import Count

fieldname = 'myCharField'
MyModel.objects.values(fieldname)
    .order_by(fieldname)
    .annotate(the_count=Count(fieldname))

有关此主题的先前问题:
  • How to query as GROUP BY in django?
  • Django equivalent of COUNT with GROUP BY
  • 关于django - Django最有效的方法来计算查询中的相同字段值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3606416/

    10-12 21:53