Группа Django по несколько раз
В моих моделях Django у меня есть
class Tracker(models.Model):
grade = models.ForeignKey(Grade, on_delete=models.CASCADE)
teacher = models.ForeignKey(User, on_delete=models.CASCADE)
student = models.ForeignKey(Student, on_delete=models.CASCADE)
BREAK_TYPE_CHOICES = [
('1', 'Toilet Pass'),
('2', 'Hall Pass'),
('3', 'Doctor Pass'),
]
break_type = models.CharField(max_length=10, choices=BREAK_TYPE_CHOICES)
start_date_time = models.DateTimeField(auto_now_add=True)
end_date_time = models.DateTimeField(auto_now=True)
status = models.BooleanField(default=False)
Мне нужно найти все перерывы в течение дня, сгруппировать по учителям с разбивкой по типу перерыва.
В настоящее время я могу получить перерывы, проведенные за день, и сгруппировать их по учителям.
breaks_today = Tracker.objects.filter(status=True, start_date_time__gte=date_from, end_date_time__lte=date_to)
breaks_today = breaks_today.values('teacher').order_by('teacher').annotate(count=Count('teacher'))
Как мне перейти к следующему шагу, т.е. группировке по типам перерывов, затем группировке по учителям?
Вы можете передать два поля в .values(…)
клаузе [Django-doc]:
breaks_today.values('teacher', 'break_type').order_by(
'teacher', 'break_type'
).annotate(count=Count('teacher'))
В результате будут созданы словари с тремя элементами: teacher
, break_type
и соответствующий count
.