可以说,如果我有一个包含很多字段的模型,但我只关心一个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))
有关此主题的先前问题:
关于django - Django最有效的方法来计算查询中的相同字段值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3606416/