Джанго: Группировка по параметру модели и количеству - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть 2 модели:

class FaultType(models.Model):
    name = models.CharField(max_length=255, blank=False, default='')
    visible = models.BooleanField(default=True)

И

class RunFault(models.Model):
    run = models.ForeignKey(Run, on_delete=models.CASCADE)
    fault_type = models.ForeignKey(FaultType, on_delete=models.CASCADE)
    note = models.CharField(max_length=100, blank=True, default='')

Мне нужно сгруппировать все экземпляры RunFault по FaultType и сосчитать их.

Желательно получитьdict со структурой (пример):

faults = {
    "some_fault" = 7,
    "foo_fault" = 4,
    "bar_fault" = 13
}

(где «blabla_fault» - FaultType.name)

В основном мне нужно, чтобы ключ dict был FaultType.name изначение для счетчика.

Сейчас я запрашиваю БД примерно так:

faults = RunFault.objects.values('fault_type__name').order_by('fault_type').annotate(count=Count('fault_type__name'))

Но это возвращает list из dicts примерно так:

faults = [
    {"fault_type__name": "some_fault"},
    {"count": 7},
    {"fault_type__name": "foo_fault"},
    {"count": 4},
    {"fault_type__name": "bar_fault"},
    {"count": 13}
]

Где один dict имеет ключ fault_type__name и значение FaultType.name, а другой dict имеет ключ count со значением, являющимся фактическим счетом.

Трудно использовать их какчто, поскольку я не могу знать, к какому счету принадлежит FaultType!

Это предполагаемое поведение .annotate(count=Count('some_key'))?

Или я делаю неправильный запрос?

...