Django ORM запрос к множеству fk

У меня проблема с поиском, который ищет значение в связанном множестве.

class Room(models.Model):
    name = models.Charfield(max_lentgh=64)

class Availability(models.Model):
    date = models.DateField()
    closed = models.BooleanField(default=False)
    room = models.ForeignKey(Room)

Учитывая, что для каждой даты в году есть одно свободное место. Как с помощью ORM-запроса найти, есть ли в номере с заданным датированным диапазоном (т.е. 7 дней):

  1. доступность существует для каждого дня в заданном диапазоне дат
  2. ни одно из доступных мест не закрылось=истина

Я не смог найти ни одного примера из Orm, который бы проверял, существуют ли все объекты в пределах daterange

Вы можете перечислить date и убедиться, что для этого date есть Availability с closed=False:

from datetime import date, timedelta

rooms = Room.objects.all()
start_date = date(2022, 7, 21)  # first day
for dd in range(7):             # number of days
    dt = start_date + timedelta(days=dd)
    rooms = rooms.filter(availability__date=dt, availability__closed=False)

После цикла rooms у for будет QuerySet со всеми Room, которые имеют для всех date в этом диапазоне Availability объекты с closed=False.

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