0

start_date と end_date の 2 つの日付フィールドを持つモデルがあります

このモデルにクエリを実行して、指定された 2 つの日付の間にあるすべてのモデル インスタンスを取得したいと考えています。この範囲にオーバーラップするモデルも欲しいです。

これらの 2 つの指定された日付は、月の開始日と終了日です。

私は次のようなことを試みました:

Model.objects.filter(Q(start_date__range=[start_range, end_range])|Q(end_date__range=[start_range, end_range])) 

しかし、start_date と end_date が 1 か月以上離れている場合、これは失敗します。

4

2 に答える 2

0

これはどのように失敗しますか? 範囲が月よりも優れているオブジェクトを返しませんか?

あなたの方法がうまくいかない理由はわかりませんが、いつでも使用することができます:

Model.objects.filter(Q(start_date__gt=start_range)|Q(end_date__lt=end_range))

これは、start_date が end_date より前である限り機能しますが、これはフォーム検証で処理する必要があります。

もう 1 つのアイデアは、データベース クエリに関しては効率的ではないかもしれませんが、範囲内にまったくないオブジェクトを除外することです。これは論理的な観点からはより効率的であるように見えますが、データ サイズと DB クエリに関してはそうではないかもしれません。

于 2012-10-23T10:09:40.193 に答える
-1
Model.objects.filter(start_date__gt=start_range).filter(end_date__lt=end_range)

これはあなたが必要とするすべてです

于 2012-10-23T10:07:20.643 に答える