django-model-utilsをいろいろ試してみる その2 TimeFramedModel
昨日の続きでdjango-model-utilsを試してみる。
今日はTimeFramedModel。
開始時刻と終了時刻をフィールドにもつようなモデルの場合に使える。
from model_utils.models import TimeFramedModel class Event(TimeFramedModel): name = models.CharField(max_length=100)
TimeFramedModelを継承したモデルはstartとendという名前のフィールドを持ちます。
from datetime import datetime, timedelta import pytz start = datetime.utcnow().replace(tzinfo=pytz.utc) - timedelta(days=1) end = datetime.utcnow().replace(tzinfo=pytz.utc) + timedelta(days=1) event = Event.objects.create(name='the event', start=start, end=end)
またTimeFramedModelを継承したモデルはtimeframedというQueryManagerを持つようになります。
timeframedは現在時刻がstartとendの範囲内であるレコードを返します。
Event.timeframed.all() #=> [<Event: the event>] # 未来のeventを登録 start = datetime.utcnow().replace(tzinfo=pytz.utc) + timedelta(days=1) end = datetime.utcnow().replace(tzinfo=pytz.utc) + timedelta(days=2) event2 = Event.objects.create(name='future event', start=start, end=end) # 未来のeventは返されない Event.timeframed.all() #=> [<Event: the event>]
timeframedが活躍するケースはわりと有りそう
関連 : django-model-utilsをいろいろ試してみる その1 StatusModel - brainstorm
参考 : carljm / django-model-utils / source / ― Bitbucket