gpt4 book ai didi

python - django 日历空闲/忙碌/可用性

转载 作者:太空狗 更新时间:2023-10-29 20:48:33 27 4
gpt4 key购买 nike

我正在尝试实现一个能够安排其他人进行约会的日历系统。系统必须能够防止在另一个约会期间或在他们不可用的时间安排一个人。

我查看了我在互联网上找到的所有现有的 django 日历项目,但似乎没有一个内置了这个(如果我不知何故错过了它,请告诉我)。

也许我只是太累了,但我能想到的唯一方法似乎有点乱。伪代码如下:

  • 当用户尝试创建新约会时,获取新约会的开始时间和结束时间
  • 对于同一天的每个约会,检查是否
    • existing_start_time < new_start_time AND existing_end_time > new_start_time(新约会的开始时间介于任何现有约会的开始和结束时间之间)
    • existing_start_time < new_end_time AND existing_end_time > new_end_time(任何现有约会的开始和结束时间之间的新约会结束时间)
  • 如果没有找到对象,则继续添加新约会

考虑到 Django 没有基于时间的过滤,这一切都必须在查询集上使用 .extra() 来完成。

所以,请问有没有更好的方法。一个 pythonic 技巧或模块或任何可能简化它的东西。或者现有的项目有我需要的东西或可以引导我朝着正确的方向前进。

谢谢。

最佳答案

使用 Django 的 range test 怎么样? .

例如:

appoinment = Appointment()
appointment.start_time = datetime.datetime.now()
# 1 hour appointment
appointment.end_time = appointment.start_time + datetime.timedelta(hours=1)
# more stuff here
appointment.save()

# Checking for collision
# where the start time for an appointment is between the the start and end times
# You would want to filter this on user, etc
# There is also a problem if you book an appointment within another appointment
start_conflict = Appointment.objects.filter(
start_time__range=(appointment.start_time,
appointment.end_time))
end_conflict = Appointment.objects.filter(
end_time__range=(appointment.start_time,
appointment.end_time))

during_conflict = Appointment.objects.filter(
start_date__lte=appointment.start_time,
end_date__gte=appointment.end_time)

if (start_conflict or end_conflict or during_conflict):
# reject, for there is a conflict

类似的东西?我自己还没有尝试过,所以您可能需要稍微调整一下。

编辑: 添加了 during_conflict 位。

关于python - django 日历空闲/忙碌/可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2271190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com