2009-07-30 97 views
3

无限期重复事件我的工作在Django日历应用程序,并希望支持一个给定的起始日期后重复的次数无限量的事件。我将存储“块事件”,其中每个块包含关于某个事件(标题,描述...)的数据以及它重复的模式和“过期日期”。这样,我只为一组可能有数百个重复事件的实例存储一条记录。如果我想创建一个“例外”,我可以将此事件块分割为例外情况,并将每个块链接到之前和将来的块。在Django日历

我的问题是,我希望能够运行的查询,就好像一个新的事件记录被插入重复的每个实例获取所有给定的时间内“的逻辑事件”。 本质上,我想向我的应用程序(和django的管理员应用程序)展示每个事件的django模型,但为我的数据库中的每组事件存储单个不同的模型。这是可能的,如果是这样的话......怎么样?还是有更好的方法来重复活动?

回答

2

一种可能的方法是有两种不同的模式。你的事件就像你拥有它们一样。然后有一个“时间跨度”模型。然后,您可以使用时间范围的开始和结束来获取跨度范围内的所有相关事件。如果您显示的是非灵活安排,则时间范围模型可能实际上是“日历日期”,然后“日历”模型可以持有CalendarDays的一周(或月,或其他),并使用该信息获取适当的一组事件。

5

看看django-schedule,其中已经实施的系统这一点。他们使用a Period class知道如何在给定的时间范围内收集个别事件发生,因此他们可以支持无限循环。

如果你想在Django管理员中为每一个循环事件的每一次出现真实的单个模型对象,这也是可能的,但是你必须放弃支持无限循环(你无法生成无限数量的模型对象)。我为一个项目实现了这个功能:每个单独的Occurrence对象具有一个可选的ForeignKey到Recurrence模型,该模型存储关于重现的元数据(即“从这个日期开始每周星期一”)。在Recurrence对象的save()方法中,我将删除或创建与其新数据匹配所需的任何链接事件。

第一个解决方案是解决问题的优越通用的解决方案,但你可能需要做更多的工作UI自己,因为你不能让每一次出现为实际的模型实例。