Django 日历空闲/忙碌/可用性
我正在尝试实现一个日历系统,能够安排其他人的约会。系统必须能够防止在另一个约会期间或在他们不可用的时间安排一个人。
我查看了在互联网上找到的所有现有 django 日历项目,但它们似乎都没有内置此功能(如果我以某种方式错过了它,请告诉我)。
也许我只是太累了,但我能想到的唯一方法似乎有点混乱。伪代码如下:
- 当用户尝试创建新约会时,获取
- 同一天每个约会的新约会的开始时间和结束时间,检查是否
- 现有开始时间 <新的开始时间和现有的结束时间> new_start_time(是任何现有约会的开始时间和结束时间之间的新约会开始时间)
- 现有开始时间 <新的结束时间和现有的结束时间> new_end_time(是任何现有约会的开始时间和结束时间之间的新约会结束时间)
- 如果没有找到对象,则继续添加新约会
考虑到 Django 没有基于时间的过滤,这一切都必须使用 .extra( )在查询集上。
所以想问一下有没有更好的办法。一个 pythonic 技巧或模块或任何可以简化此操作的东西。或者一个现有的项目有我需要的东西或者可以引导我走向正确的方向。
谢谢。
I am trying to implement a calendar system with the ability to schedule other people for appointments. The system has to be able to prevent scheduling a person during another appointment or during their unavailable time.
I have looked at all the existing django calendar projects I have found on the internet and none of them seem to have this built-into them (if I missed it somehow, please let me know).
Perhaps I am just getting too tired, but the only way I can think of doing this seems a little messy. Here goes in pseudo code:
- when a user tries to create a new appointment, grab the new appointment's start_time and end_time
- for each appointment on that same day, check if
- existing_start_time < new_start_time AND existing_end_time > new_start_time (is the new appointments start time in between any existing appointment's start and end times)
- existing_start_time < new_end_time AND existing_end_time > new_end_time (is the new appointments end time in between any existing appointment's start and end times)
- if no objects were found, then go ahead and add the new appointment
Considering Django has no filtering based on time, this must all be done using .extra() on the queryset.
So, I am asking if there is a better way. A pythonic trick or module or anything that might simplify this. Or an existing project that has what I need or can lead me in the right direction.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 Django 的范围测试怎么样。
例如:
类似这样的事情吗?我自己还没有尝试过,所以你可能需要稍微调整一下。
编辑:添加了
during_conflict
位。What about using Django's range test.
For example:
Something like that? I haven't tried this myself so you may have to tweak it a bit.
EDIT: Added the
during_conflict
bit.这里需要注意的是不同用户的不同时区,并且将夏令时纳入其中,事情会变得非常复杂。
您可能想看看 pytz 模块来处理时区问题。
One caveat here is the different timezones of different users, and bring Daylight saving time into the mix things become very complicated.
You might want to take a look at pytz module for taking care of the timezone issue.