У меня есть модель 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?