毎年繰り返されるイベントを表すアイテムのセットを含むデータベース テーブルがあります。レコード セットは、月と日ごとに保存されます。カレンダーの日付の範囲に対応するイベント レコードを取得する必要があることがよくあります。私は Django ORM を使用してレコードを操作しているので、現時点では日付を対応するQ
オブジェクトに変換します (たとえばQ(month=month, day=day)
、MyModel.objects.filter()
.
私の日付範囲が新年と交差する場合、問題が発生します。2013 年 12 月 31 日から 2014 年 1 月 1 日までのイベントが必要な場合は、次のようにします。
MyModel.objects.filter(Q(month=12, day=31) | Q(month=1, day=1))
しかし、私は結果を次の順序で取得します。
month = 1, day = 1
month = 12, day = 31
代わりに、次の順序で結果を取得したいと思います。
month = 12, day = 31
month = 1, day = 1
質問を不必要に複雑にする理由から、単純にクエリを 2 つのクエリ (各年に 1 つずつ) に分割することはできません。1 つのクエリを作成して、目的の順序で結果を取得したいと考えています。必要に応じて、クエリを再構成できます。
便利なのはわかっていextra
ますが、使い方がよくわかりません。
アップデート:
意図したソリューションに少し近づくために、絶対的な順序付けを課すために、ユリウス日を「計算された」フィールドとして結果に滑り込ませ、そのフィールドで並べ替えることができました。しかし、それを行う方法は?