2017-12-28 5 views
-2

休日を保存するために開始日と終了日を保存する必要があります。 私は休日が毎年繰り返されるので、年の一部については気にしません。Django年齢の日付範囲への良いアプローチは何ですか

また、この日付を照会して、ランダムな日時が範囲内にあるかどうかを確認する必要があります。年を保存したくない場合でも、休暇は1年後に始まり、来年(12月25日〜1月4日)に終了することがクエリで分かるはずです。

以前はDateTimeFieldsとして日付を格納していましたが、保存されている各祝日を繰り返し、指定されたターゲット日付が日付範囲内にあるかどうかを確認していました。これはPythonで作成されたもので、QuerySetsをリストに評価して最後に値を追加するように強制されました。getattr(result, 'is_a_holiday', value)

パフォーマンスの問題が発生しているので、これを注釈に移動したいのです(select_relatedとquerysetをprefetch_related data)を作成し、データベース(Postgresql)をクエリ部分にするが、データベースが年とみなす問題にぶつかり、今年の休日内の日付は前年または次の休日年。

私はすでにdjango-yearlessdateを試してみましたが、条件式とF式で注釈を付けましたが(年が変わったときにチェックします)、期待どおりに動作しません。休日がいくつかある場合、私はちょうどデフォルトの戻り値を取得します。

この問題に対するその他の/異なるアプローチは何ですか?

+0

前述のように、以前はDateTimeFieldsとして日付を格納していましたが、保存されている各祝日を繰り返し、指定されたターゲット日付が日付範囲内にあるかどうかを確認していました。これはPythonで作成されたもので、QuerySetsをリストに評価し、最終的にgetattr(result、 'is_a_holiday'、value)*などの値を追加するように強制されました。 django-yearlessdateと条件式とF式で注釈を付けると(年が変わったときにチェックする)、期待どおりに動作していません... * これは動作しません –

+0

コードを教えてください。 –

+0

(これはおそらくあなたが途中でdownvoteを持っている可能性があります) –

答えて

0

あなたは年を必要としない場合は、個別に月と日を保持するために、あなたのモデルに2つの別々のフィールドを作成することができます。

class Holiday(...): 
    month = models.PositiveSmallIntegerField() 
    day = models.PositiveSmallIntegerField() 

そして、与えられた範囲間の休日を見つけるために、あなたはこれを行うことができます

from_date = <datetime object> 
to_date = <datetime object> 

Holiday.objects.filter(month__range[from_date.month, to_date.month], 
         day__range[from_date.day, to_date.day] 
        ) 
関連する問題