Допустим, у меня есть модель с большим количеством полей, но меня интересует только поле char. Допустим, charfield может быть любым, поэтому я не знаю возможных значений, но я знаю, что значения часто перекрываются. Таким образом, у меня может быть 20 объектов с «abc» и 10 объектов с «xyz», или у меня может быть 50 объектов с «def» и 80 с «stu», и у меня есть 40000 без перекрытия, что меня действительно не волнует.
Как правильно подсчитать предметы? Я бы хотел вернуть что-то вроде:
{'abc': 20, 'xyz': 10, 'другое': 10,000}
или что-то в этом роде, без тонны вызовов SQL.
РЕДАКТИРОВАТЬ:
Не знаю, увидит ли это кто-нибудь, потому что я редактирую это поздно, но ...
У меня такая модель:
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, и именно поэтому у меня были все проблемы.