2016-06-28 4 views
1

は、私はこのようなモデルを持っているしたいとしクエリ新しいジャンゴ/ PostgresのDateRangeField

私はでDBを照会するにはどうすればよい
obj1 = QueryRange.objects.create(name='John', rsv=('2016-06-01', '2016-06-10')) 
obj2 = QueryRange.objects.create(name='Peter', rsv=('2016-07-05', '2016-07-10')) 
obj3 = QueryRange.objects.create(name='Chris', rsv=('2016-07-12', '2016-07-15')) 

日付「2016-07-08」が占有されているかどうかを確認してください。。このような

何かが動作しません。

from psycopg2.extras import DateRange 

rng = DateRange('2016-07-08') 
QueryRange.objects.filter(rsv__contains=rng) 

私は2つの別々のdateフィールド(from_dateuntil_date)と同じシナリオを実装し、(もちろん)素晴らしい作品です。私はちょうどDateRangefieldで自分自身に恩恵を与える方法が好奇心旺盛です。

そこにいるすべてのジャンゴナウトへの歓声!

答えて

2

あなたはあなたの答えに非常に近いです。あなたが照会する日付範囲を使用している場合は、おそらく任意の重複がありますかどうかを確認するために探している、

from datetime import date 
QueryRange.objects.filter(rsv__contains=date.today()) 

:1つの日付の存在を探している場合は、直接日付オブジェクトを使用

rng = DateRange('2016-07-08', '2016-07-20') 
QueryRange.objects.filter(rsv__overlap=rng) 

両方の例をテストして、動作することを確認しました。

+0

ありがとうございます。私はできるだけ早くそれを試し、結果のためにここに投稿します。 –

+0

それは素晴らしく働いた!しかし、Johnの上限である 'QueryRange.objects.filter(rsv__contains = date(2016,6,10))'を検索すると、何も表示されません。私は、デフォルトでそれが除外されていることを知っています。どのように含めることができますか? ( 'DateRange'ではなく' date'に対して) –

+0

あなたのデータベースに '$ d1'から' $ d2'の日付範囲があり、 '$ d2'のためにフィルタリングすると、結果は得られません'[)'境界を持っていますか?唯一の解決策は '$ d2 - timedelta(days = 1)'を検索することです。私は最近、 '[]'のような他の境界を実装するようにdjangoのチケットをオープンしましたので、これは起こりません。 – Anonymous

関連する問題