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'
Вернуться на верх