Django rest framework, возвращающий статус товара забронирован или свободен на основе текущей даты/времени
В настоящее время я работаю над сайтом для моих студентов, где они смогут бронировать некоторые предметы в классе. Я уже закончил с логикой и формой бронирования, так что двум студентам не разрешается бронировать один и тот же предмет одновременно. Я хотел бы создать для них таблицу, в которой будет отображаться название предмета и статус предмета на основе текущего времени. Итак, у меня есть веб-страница/django представление, которое имеет список всех сделанных бронирований, включая название предмета, дату начала, дату окончания, и человека, который забронировал предмет. Итак, на основе этого списка бронирований я хотел бы создать некоторую логику, которая будет проходить через этот список бронирований и сравнивать его с текущим временем/датой. Проще говоря, если текущее время/дата попадает в промежуток между начальной и конечной датой забронированного элемента, он должен вернуть значение "забронирован", в противном случае - "свободен". Я не уверен, как этого добиться. Я провел несколько дней в мозговом штурме, искал подсказки в Интернете, но ничего не нашел. Я буду очень благодарен, если кто-нибудь поможет мне. Вот мои модели:
class Items(models.Model):
ITEMS_CATEGORIES=(
('item-1', 'item-1'),
('item-2', 'item-2'),
('item-3', 'item-3'),
('item-4', 'item-4'),
('item-5', 'item-5'),
)
category = models.CharField(max_length=5, choices=ITEM_CATEGORIES)
def __str__(self):
return self.category
class Booking(models.Model):
user = models.CharField(max_length=50, editable=False)
note = models.CharField(max_length=300, default='SOMESTRING')
item = models.ForeignKey(Subsystem, on_delete=models.CASCADE)
check_in = models.DateTimeField()
check_out = models.DateTimeField()
def __str__(self):
return f' {self.item} is booked successfully by {self.user} from {self.check_in.strftime("%d-%b-%Y %H:%M")} to {self.check_out.strftime("%d-%b-%Y %H:%M")} for {self.note} '
Так что я придумал что-то вроде этого, но этот код 100% неправильный, но что-то похожее на это
serializers:
class BookingSerializer(serializers.ModelSerializer):
class Meta:
model = Booking
fields = (
'item','check_in','check_out', 'user'
)
current_time = datetime.datetime.now()
/
/
some logic //
if current_time = (check_in and check_out)
return "Booked"
else
return "Free"
Вы можете использовать SerializerMethodField
для добавления другого поля, возвращающего значение из вычисления, которое вам необходимо:
class BookingSerializer(serializers.ModelSerializer):
status = serializers.SerializerMethodField()
class Meta:
model = Booking
fields = (
'item', 'check_in', 'check_out', 'user', 'status'
)
def get_status(self, obj):
return 'Booked' if obj.check_in <= datetime.datetime.now() <= obj.check_out else 'Free'