開始と終了の予約があります(例をより明確にするために、リソースへの参照は削除されています):
class Reservation(db.Model):
fromHour = db.DateTimeProperty()
toHour = db.DateTimeProperty()
fromToRange = db.ComputedProperty(lambda x: [x.fromHour, x.toHour])
そして、前の予約と重複していないかどうかを確認して別の予約を追加したい-GoogleAppEngineでそのようなクエリを表現する方法。
最初にlistプロパティを使用してこのクエリを試しましたが、二重不等式フィルターが機能しません。from1<to2とfrom1>=from2の2つの一致と、1つの結果を実行する必要があります。データが増えるとコストがかかる可能性があります。
fromHour = datetime.datetime(2012, 04, 18, 0, 0, 0)
toHour = datetime.datetime(2012, 04, 18, 2, 0, 0)
reservation = Reservation(fromHour = fromHour, toHour = toHour, colors = ['white', 'black'])
reservation.put()
self.response.out.write('<p>Both %s</p>' % fromHour)
self.response.out.write('<ol>')
for reservation in Reservation.all()\
.filter('fromToRange >', fromHour)\
.filter('fromToRange <=', fromHour):
self.response.out.write('<li>%s</li>' % (reservation.fromToRange))
self.response.out.write('</ol>')
日を含む追加のプロパティを使用できる別の解決策を見つけました(これは予約ごとの範囲内の日数のリストになります)。データのスキャンを絞り込み、新しい予約と重複していない場合はすべてのレコードをチェックする必要があります。
重複する予約を検出するために最適なクエリを実行する方法を支援し、回答を提供してください-Google App Engineでの時間範囲クエリの迅速な第3の解決策があるか、サポートされていない可能性があります。