Как использовать пункт Group by без id модели в Django ORM?

Это моя модель

class Model1(models.Model):
    category = models.CharField()
    name = models.CharField()

Я хочу получить счетчик category. Поэтому я написал ORM следующим образом:

from django.db.models import Count

result = Model1.objects.values('category').annotate(Count('sns_type'))

но результат показан как показано ниже

<QuerySet [{'category': 'A', 'category__count': 1}, 
{'category': 'B', 'category__count': 1},...]>

Я чувствовал себя так странно, поэтому я напечатал запрос этого результата. Запрос выглядит следующим образом

SELECT "example_table"."category", COUNT("example_table"."category") AS "category__count" 
FROM "example_table" 
GROUP BY "example_table"."category", "example_table"."id"

Я не знаю, почему id включен в этот запрос.

Запрос, который я хочу использовать, выглядит следующим образом:

SELECT "example_table"."category", COUNT("example_table"."category") AS "category__count" 
FROM "example_table" 
GROUP BY "example_table"."category"

Используйте .order_by(…) [Django-doc]:

from django.db.models import Count

result = Model1.objects.values('category').annotate(
    Count('sns_type')
).order_by('category')

That being said, repeating the same category as a CharField is usually not a good idea. Usually one works with a ForeignKey to a Category model as part of database normalization [wiki]:

class Category(models.Model):
    name = models.CharField(max_length=32)


class Model1(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    name = models.CharField(max_length=32)

Затем вы делаете запрос с:

from django.db.models import Count

Category.objects.annotate(model1_count=Count('model1'))
Вернуться на верх