Давайте скажем, если у меня есть модель, у которой много полей, но я забочусь только об charfield. Допустим, что charfield может быть любым, поэтому я не знаю возможных значений, но я знаю, что значения часто перекрываются. Таким образом, у меня могло быть 20 объектов с "abc" и 10 объектов с "xyz", или у меня могло бы быть 50 объектов с "def" и 80 с "stu", и у меня 40000 без перекрытия, которые мне действительно не нужны.
Как эффективно считать объекты? То, что я хотел бы вернуть, это что-то вроде:
{'abc': 20, 'xyz': 10, 'other': 10,000}
или что-то в этом роде, без тонны вызовов SQL.
EDIT:
Я не знаю, увидит ли кто-нибудь это, потому что я редактирую его как-то поздно, но...
У меня есть эта модель:
class Action(models.Model): author = models.CharField(max_length=255) purl = models.CharField(max_length=255, null=True)
и из ответов я сделал это:
groups = 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"}
(я просто заполнил пурпурными фиктивными значениями)
я хочу
{'waka': 4, 'mora': 5, 'lora': 1}
Надеюсь, кто-то увидит это редактирование...
ИЗМЕНИТЬ 2:
По-видимому, моя база данных (BigTable) не поддерживает агрегированные функции Django, и именно поэтому у меня возникли проблемы.