2009-07-30 18 views
3

私はdjangoでカレンダーアプリケーションを作成しており、指定された開始日の後に無限回繰り返すイベントをサポートしたいと考えています。私は、各ブロックが特定のイベント(タイトル、説明...)に関するデータとそれが繰り返すパターンと "有効期限"を含む "ブロックイベント"を保存します。このようにして、私はイベントの繰り返されたインスタンスの何百ものグループのための1つのレコードだけを格納します。 「例外」を作成したい場合は、このイベントブロックを例外の周りに分割して、各ブロックを前後のブロックにリンクさせることができます。djangoカレンダーで無期限にイベントを繰り返す

私の問題は、新しいイベントレコードが繰り返しの各インスタンスに挿入されたかのように、特定の期間内にすべての「論理イベント」を取得するクエリを実行できるようにすることです。 私は、各イベントのdjangoモデルを自分のアプリケーション(とdjangoのadminアプリケーション)に公開したいのですが、私のデータベースにイベントのグループごとに異なるモデルを格納します。これは可能でしょうか?それとも、イベントを繰り返す方が良いでしょうか?

答えて

2

考えられるアプローチの1つに、2つの異なるモデルがあります。あなたのイベントはあなたが持っているものと同じです。次に、「タイムパン」モデルを作成します。その後、タイムスパンの開始と終了を使用して、スパン内の関連するすべてのイベントを取得できます。柔軟性のない配置を示している場合、タイムスパンモデルは実際には「CalendarDay」であり、「カレンダー」モデルはCalendarDaysの週(または月など)を保持し、その情報を使用して適切なイベントのセット。

5

django-scheduleを参照してください。これはすでにこのためのシステムを実装しています。彼らはa Period classを使用して、特定の時間枠内で個々のイベントの発生を収集する方法を知っているため、無限の再発をサポートできます。

繰り返しイベントの発生ごとに実際の個別モデルオブジェクトをDjango管理者でマニフェストしたい場合は、それも可能ですが、サポートする無限回帰をあきらめなければなりません(無限の数を生成することはできませんモデルオブジェクトの)。 1つのプロジェクトでこれを実装しました。個々のOccurrenceオブジェクトには、繰り返しに関するメタデータ(「この日から始まる毎週月曜日)」を格納するRecurrenceモデルへのForeignKeyオプションがありました。 Recurrenceオブジェクトのsave()メソッドでは、新しいデータとのマッチングに必要なリンクされたオカレンスを削除または作成します。

問題の優れた一般的な解決策は最初の解決策ですが、すべての発生を実際のモデルインスタンスにすることはできないため、より多くのUI作業を自分自身で行う必要があります。

関連する問題