【问题标题】:How to find avaiable time slots in an Appointments table using Django ORM?如何使用 Django ORM 在约会表中查找可用的时间段?
【发布时间】:2016-07-08 19:41:26
【问题描述】:

我有一个 Django 模型,用于模拟与医生预约的患者,如下所示:

class Appointment(Model):
    doctor = models.ForeignKey(User)
    start = models.DateTimeField()
    finish = models.DateTimeField()
    ...

我想找到在一系列日期时间之间至少有一定长度的可用时隙,如下所示:

def find_timeslots(timeslot_length, start_datetime, finish_datetime): 
    ....

一些观察:

  • 从开始到结束的时间相差最多 8 小时
  • 约会可以持续一天(例如,我可以有一个从 2016 年 3 月 21 日 22:00:00 开始到 2016 年 3 月 22 日 06:00:00 结束的约会)。

我当前的解决方案是从医生那里获取所有约会,并以 timeslot_length 间隔从 start_datetimefinish_datetime 迭代,检查是否存在冲突。如果没有冲突,我将(开始,结束)元组存储在列表中。

它有点工作,但它似乎不是一个优雅的解决方案。有什么更好的方法来解决这个问题?

【问题讨论】:

    标签: python sql django orm


    【解决方案1】:

    为每个预约空档生成一个唯一的空档 ID。您可以将日期 + 时间 + Doctorid 组合为插槽 ID(取决于您)。当您保存约会时,使用您生成的槽 id 保存它,当您想要检查冲突时,您不需要从开始时间迭代到结束时间,只需检查您要保存的槽 id 是否存在。

    【讨论】:

    • 我看到这种方法的问题是(可能)会有很多未使用的插槽,特别是如果医生数量迅速增加。当我当前的模型在大多数情况下都可以正常工作时,似乎太麻烦了,除非尝试建议可用的插槽。
    • 您不需要保存数据库中的每个插槽。只需以编程方式生成插槽并仅保存已预订的插槽。为此,您需要在插槽 id 中维护一个模式
    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多