次のように、メモ化された Django モデルマネージャーメソッドがあります。
class GroupManager(models.Manager):
def get_for_user(self, user):
cache_key = 'groups_%s' % (user.id)
if not hasattr(self, key):
groups = get_groups_somehow()
setattr(self, cache_key, groups)
return getattr(self, cache_key)
ただし、メモ化された値は、要求/応答サイクルを超えて持続します。つまり、サーバーが再起動されるまで、後続のリクエストで値が再計算されることはありません。これは、マネージャー インスタンスが破棄されていないためです。
では、モデル マネージャーのメソッドを適切にメモ化するにはどうすればよいでしょうか。