【问题标题】:Django: Hotel Reservation database start_date and end_dateDjango:酒店预订数据库 start_date 和 end_date
【发布时间】:2021-09-29 23:42:41
【问题描述】:

我有一个看起来像这样的 Django 模型

Class Reservation(models.Model):
   room = models.ForeignKey(Room)
   start_date = models.DateTimeField(default=timezone.now, null=True)
   end_date = models.DateTimeField(default=timezone.now, null=True)
   person = models.ManyToManyField(Person, related_name="people")

一个房间可以有多个预订,一个预订可以容纳多个人。

我想在接下来的 30 天内使用给定房间中的 availability 空间。

可用性只是一个房间可以容纳的总人数 - 活跃出租的总人数。

这是为了让预订新房源的用户知道一个房间可以容纳多少人。

预期结果

{

    "22-Jul-2021": 5,
    "23-Jul-2021": 2,
    "24-Jul-2021": 5,
    "25-Jul-2021": 3,
    "26-Jul-2021": 8,
    "27-Jul-2021": 1,

}

【问题讨论】:

  • 一个 SQL 查询也可以解决这个问题
  • 一个用例是 AirBnB 的预订可用性系统

标签: mysql django database django-models django-rest-framework


【解决方案1】:
  • 包含日期字段的可用性模型、表示该特定日期可用客人数量的整数和用于预订的 FK 字段;
class Availability(models.Model):
    current_date = models.DateField()
    quantity_guests = models.IntegerField()
    reservation = models.ForeignKey(Reservation)

您可以覆盖Roomclass 的models.Manager,并创建一个自定义的列表方法,该方法将返回您想要的结果。

要了解有关如何执行此操作的更多信息,我会查看官方文档 here 和教程,例如 this one。

最后它看起来像:

class RoomManager(models.Manager):
    def list_availabilities(self...):
        # put your code to query the room and its availabilities here and return a queryset of it...
        return super().get_queryset().filter(........)



class Room(models.Model):
    ...

    objects = RoomManager()

    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2012-03-06
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多