У меня есть 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'))
?
Или я делаю неправильный запрос?