Фильтрация по датам доступности в Джанго - PullRequest
3 голосов
/ 23 декабря 2011

Представьте себе общежитие, отслеживающее, свободна ли комната в данный вечер. Кроме того, если группа из более чем одного гостя ищет номер, им понадобится только номер с как минимум таким количеством кроватей.

Учитывая диапазон дат, я хотел бы найти свободные номера, в которых есть как минимум количество спальных мест в зависимости от количества гостей (наряду с другими фильтрами).

Как я могу сделать это без эффективной цепочки AND с .filters? (Вот как это работает сейчас - и очень огорчает мою базу данных.)

Я, безусловно, открыт для другой схемы хранения данных о доступности, если это необходимо.

Спасибо! (Гипотетические классы ниже, чтобы лучше понять проблему.)

class Room(models.Model):
    name = models.CharField(max_length=100)

class RoomAvailability(models.Model):
    room = models.ForeignKey(Rooms)
    date = models.DateField()
    beds = models.IntegerField(default=1)

1 Ответ

1 голос
/ 23 декабря 2011
available_rooms = (Room.objects
    .filter(roomavailability__date__range=(start_date, end_date))
    .values('roomavailability__date', 'pk')
    .annotate(sum=Sum('roomavailability__beds'))
    .filter(sum__gte=min_beds))

Обновление: забыл, что нам нужно наличие свободных мест в день. Этот запрос вернет наборы доступных дат и их номер PK.

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