Группировать по и подсчитывать внешний ключ - PullRequest
1 голос
/ 07 марта 2020

У меня есть модель данных, в которой я храню определенные Event s, которые случаются. Каждый Event связан с EventType. Модель данных выглядит примерно так:

class EventType(models.Model):
    name = ...

class Event(models.Model):
    date = ...
    event_type = models.ForeignKey(EventType)

Что я хотел бы знать, так это как часто появлялось время каждого события. Я попробовал это так:

Event.objects.values('event_type', count=Count('event_type'))

Но результат выглядит так:

<QuerySet [{'count': 1, 'event_type': 71}, {'count': 1, 'event_type': 2}, {'count': 1, 'event_type': 71}, {'count': 1, 'event_type': 71}, ...

Таким образом, записи не были сгруппированы. Как сделать так, чтобы они были сгруппированы?

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Когда вы определяете внешний ключ, event_set добавляется в модель EventType. Вы можете узнать количество каждого EventType, добавив следующее свойство

class EventType(models.Model):
...
@property
def count(self):
    return self.event_set.count()

, и вы можете использовать его так:

for item in EventType.objects.all():
    print({'event_type':item.id, 'count':item.count})

output: {'event_type': 71, 'count ': 3} {' event_type ': 2,' count ': 1} ...

1 голос
/ 07 марта 2020

Вы можете использовать следующий запрос Event.objects.all().values('event_type').annotate(count=Count('event_type'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...