Djangoフィルターで以下を論理的に表現するのに苦労しています。「イベント」モデルとロケーションモデルがあり、次のように表すことができます。
class Location(models.Model):
name = models.CharField(max_length=255)
class Event(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
location = models.ForeignKeyField(Location)
objects = EventManager()
特定の場所について、今日発生するすべてのイベントを選択したいと思います。EventManagerの「bookings_today」メソッドを介してさまざまな戦略を試しましたが、正しいフィルター構文ではわかりません。
class EventManager(models.Manager):
def bookings_today(self, location_id):
bookings = self.filter(location=location_id, start=?, end=?)
date()は時間をゼロにするため失敗し、日中の時間はアプリにとって重要です。同じことが日付の最小値と最大値にも当てはまり、それらをブックエンドとして使用します。さらに、複数の有効な構成が考えられます。
start_date < today, end_date during today
start_date during today, end_date during today
start_date during today, end_date after today
さまざまなオプションのセット全体をコーディングする必要がありますか、それともよりシンプルでエレガントな方法がありますか?