Django ORM Group По диапазону дат - PullRequest
1 голос
/ 15 октября 2019

У меня есть модель Django, в которой пользователям может быть присвоен статус на определенный период, например, «Отсутствует» с 2019-10-01 по 2019-10-20:

class Status(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='statuses')
    status = models.CharField(max_length=100, choices=status_choices)
    valid_from = models.DateField()
    valid_to = models.DateField()

Что япытаюсь вычислить: статус для каждого пользователя, для каждой недели:

Mr. A    Week 1    Absent
Mr. A    Week 2    Present
Mr. A    Week 3    Present
Mr. B    Week 1    Absent
Mr. B    Week 2    Absent
Mr. B    Week 3    Present

Единственное, что я могу придумать, - это создать цикл for и повторять все даты, которые я хочуinclude:

for date in dates:
   Status.objects.filter(valid_from__lte=date, valid_to__gt=date).values('user__username', 'status')[:1]

Но, как можно себе представить, он создает слишком много запросов ... Кто-нибудь, кто знает способ сделать это в одном запросе ORM?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...