Django日历中无限重复事件

4
我正在开发一个基于Django的日历应用程序,并希望支持在给定起始日期后无限次重复的事件。我将存储“块事件”,其中每个块包括关于某个事件(标题、描述等)以及重复模式和“过期日期”的数据。这样,我只需要为可能有数百个重复实例的一组事件存储一条记录。如果我想做一个“异常”,我可以围绕异常分裂此事件块,并将每个块链接到先前和未来的块。
我的问题是,我想能够运行查询以提取在给定时间段内的所有“逻辑事件”,就好像插入了每个重复实例的新事件记录一样。 实质上,我想向我的应用程序(和Django的管理应用程序)展示每个事件的Django模型,但在数据库中为每组事件存储单独的模型。 这种方法是否可行?如果是,如何实现?或者有更好的重复事件方法吗?
2个回答

6

可以看一下django-schedule,他们已经实现了此系统。他们使用Period类来收集在给定时间范围内的单个事件发生,因此可以支持无限重复。

如果您想要在Django管理器中为每个重复事件的每次发生展示真实的单个模型对象,这也是可能的,但您将不得不放弃支持无限重复(您无法生成无限数量的模型对象)。我为一个项目实现了这个:每个单独的Occurrence对象都有一个可选的ForeignKey指向Recurrence模型,该模型存储有关重复事件的元数据(即“每周在星期一开始于这个日期”)。在Recurrence对象的save()方法中,我会删除或创建任何需要匹配其新数据的链接Occurrences。

第一个解决方案是问题的更好的通用解决方案,但是您可能需要自己完成更多的用户界面工作,因为您不能让每个Occurrence成为实际的模型实例。


2

一种可能的方法是有两个不同的模型。您的事件就像您拥有它们的那样。然后有一个“时间跨度”模型。然后,您可以使用时间跨度的开始和结束来获取所有在该跨度内的相关事件。如果您显示的是非灵活的安排,则时间跨度模型实际上可以是“日历日”,然后“日历”模型可以包含一周(或一个月,或其他任何东西)的日历日,并使用该信息获取正确的事件集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接