Django rest 框架,根据当前 date/time 返回项目状态已预订或免费

Django rest framework, returning item status booked or free based on current date/time

我目前正在为我的学生开发一个网站,帮助他们在课堂上预订一些物品。我已经完成了预订逻辑和表格,因此不允许两个学生同时预订同一项目。我想为他们创建一个 table,它根据当前时间显示项目名称和项目状态。所以我有一个 webpage/django 视图,其中包含所有预订的列表,包括项目名称、开始日期、结束日期和预订该项目的人。因此,基于此预订列表,我想创建一些逻辑来遍历此预订列表并将其与当前 time/date 进行比较。简而言之,如果当前 time/date 介于预订项目的开始日期和结束日期之间,则它应该 return 值“已预订”,否则为“免费”。我不确定如何实现这一目标。我集思广益了好几天,并在互联网上搜索了一些提示,但一无所获。如果有人帮助我,我将非常感激。这是我的模型:

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 添加另一个字段,该字段 returns 来自您需要的计算值:

import django.utils import timezone


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 <= timezone.now() < obj.check_out else 'Free'