Я работаю над приложением бронирования отелей, в котором у меня есть модель для "RoomType", которая содержит поле для количества доступных номеров в день ...
Я создал новую модель для сохранения BookedDates ( from, to), с ForiegnKey для модели RoomType ...
Каждый раз, когда пользователь бронирует комнату (от, до), будет послан сигнал модели RoomType для сохранения в нем в ManyToManyField .. .
Теперь конечные пользователи будут искать доступные комнаты с указанием c даты (от, до)
Поэтому я создал запрос для фильтрации комнат, доступных в этом даты и проверить, зарезервировано ли оно в указанной дате c больше раз, чем числоOfAvailableRoom в день.
Моя проблема в том, что когда я делаю запрос для фильтрации RoomTypes i. exclude () через него Модели Query For BookedDates, в которых поле numberOfAvailableRoom на день меньше числа времени, указанного c номер забронирован на эту дату ... но фактически результат этого исключает любой номер RoomType, который регистрируется в моделях BookedDates!
models.py
class BookedDates(models.Model):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, null=True)
room_type = models.ForeignKey(
'RoomType', on_delete=models.CASCADE, null=True)
booked_from = models.DateField(null=True)
booked_to = models.DateField(null=True)
def __str__(self):
return '{} /\ {} /\ {}'.format(self.room_type, self.hotel, self.booked_from)
class RoomType(models.Model):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
room_type = models.ForeignKey(RoomTypesNames, on_delete=models.CASCADE)
bookedDates = models.ManyToManyField(
BookedDates)
number_of_rooms = models.PositiveIntegerField()
views.py
roomsByDate = RoomType.objects.annotate(modulo=numAdult % F('room_capacity')).filter(
q_city, q_room_capacity1, modulo=0
).exclude(number_of_rooms__lte = BookedDates.objects.filter(room_type=F('room_type'),
booked_from__in = day).count()) ## my error is that the exclude , excludes any room type in the BookedDates model, even if it is reserved in this date number of times less than number_of_rooms available per day
Любой другой подход для создания этого запроса правильным способом Будет приветствоваться Заранее спасибо