У меня есть модель:
class Employee(models.Model): name = models.CharField(max_length=255) department = models.ForeignKey("Department", ...) ...... ...
Вот набор запросов, который возвращает наиболее эффективных сотрудников компании, отсортированных по аннотированному полю score
.
best = Employees.objects.filter(...some filters).annotate(score=...some calculations).order_by('-score')
Как ограничить набор запросов, чтобы он возвращал максимум 2 or n
no. последовательных сотрудников с одним и тем же отделом?
текущий результат:(только полиграфический отдел ради экономии времени)
dep5, dep9, dep9, dep9, dep9, dep5, dep5, dep4, dep4, dep4
Ожидаемый результат: (только полиграфический отдел ради экономии времени)
dep5, dep9, dep9, dep5, dep5, dep4, dep4
Примечание.
Я провел свое исследование и не смог найти никакого решения. Пожалуйста помоги.
partition_by=department_id
, аннотируйте его, например.rn
и отфильтровать какrn <= 2
- person Ivan Starostin   schedule 03.02.2020q.annotate(row_number=Window(expression=RowNumber(), partition_by=[F('department')])).filter(row_number__lte=2).order_by('row_number', '-score')
- person whitehat   schedule 03.02.2020