2009-07-30 42 views
3

無限期重複事件我的工作在Django日曆應用程序,並希望支持一個給定的起始日期後重復的次數無限量的事件。我將存儲「塊事件」,其中每個塊包含關於某個事件(標題,描述...)的數據以及它重複的模式和「過期日期」。這樣,我只爲一組可能有數百個重複事件的實例存儲一條記錄。如果我想創建一個「例外」,我可以將此事件塊分割爲例外情況,並將每個塊鏈接到之前和將來的塊。在Django日曆

我的問題是,我希望能夠運行的查詢,就好像一個新的事件記錄被插入重複的每個實例獲取所有給定的時間內「的邏輯事件」。 本質上,我想向我的應用程序(和django的管理員應用程序)展示每個事件的django模型,但爲我的數據庫中的每組事件存儲單個不同的模型。這是可能的,如果是這樣的話......怎麼樣?還是有更好的方法來重複活動?

回答

2

一種可能的方法是有兩種不同的模式。你的事件就像你擁有它們一樣。然後有一個「時間跨度」模型。然後,您可以使用時間範圍的開始和結束來獲取跨度範圍內的所有相關事件。如果您顯示的是非靈活安排,則時間範圍模型可能實際上是「日曆日期」,然後「日曆」模型可以持有CalendarDays的一週(或月,或其他),並使用該信息獲取適當的一組事件。

5

看看django-schedule,其中已經實施的系統這一點。他們使用a Period class知道如何在給定的時間範圍內收集個別事件發生,因此他們可以支持無限循環。

如果你想在Django管理員中爲每一個循環事件的每一次出現真實的單個模型對象,這也是可能的,但是你必須放棄支持無限循環(你無法生成無限數量的模型對象)。我爲一個項目實現了這個功能:每個單獨的Occurrence對象具有一個可選的ForeignKey到Recurrence模型,該模型存儲關於重現的元數據(即「從這個日期開始每週星期一」)。在Recurrence對象的save()方法中,我將刪除或創建與其新數據匹配所需的任何鏈接事件。

第一個解決方案是解決問題的優越通用的解決方案,但你可能需要做更多的工作UI自己,因爲你不能讓每一次出現爲實際的模型實例。