Группа 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.

Вернуться на верх