【问题标题】:Indefinitely repeating events in django calendardjango日历中无限重复的事件
【发布时间】:2009-07-30 20:19:04
【问题描述】:

我正在开发 django 中的日历应用程序,并希望支持在给定开始日期后无限次重复的事件。我将存储“块事件”,其中每个块都包含有关某个事件(标题、描述...)的数据以及它重复的模式和“到期日期”。这样,我只为一组可能数百个重复的事件实例存储一个记录。如果我想创建一个“异常”,我可以围绕异常拆分这个事件块,并将每个块链接到之前和未来的块。

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

【问题讨论】:

    标签: django django-models calendar django-admin


    【解决方案1】:

    看看django-schedule,它已经为此实现了一个系统。他们使用a Period class,知道如何收集给定时间范围内发生的单个事件,因此它们可以支持无限重复。

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

    第一个解决方案是解决问题的一个优越的通用解决方案,但您可能需要自己做更多的 UI 工作,因为您无法将每个 Occurrence 都变成实际的模型实例。

    【讨论】:

      【解决方案2】:

      一种可能的方法是使用两种不同的模型。你的事件就像你得到它们一样。然后有一个“时间跨度”模型。然后,您可以使用时间跨度的开始和结束来获取该跨度内的所有相关事件。如果您展示的是非灵活安排,则时间跨度模型实际上可能是“CalendarDay”,然后“Calendar”模型可以保存一周(或一个月,或其他)的 CalendarDays 并使用该信息来获得正确的一组事件。

      【讨论】:

        猜你喜欢
        • 2010-11-10
        • 2012-04-26
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        • 1970-01-01
        相关资源
        最近更新 更多