ModelCacheManager

Suppose there are many key_fields of model on which InstanceCache classes can be defined. E.g. User model’s instance can be cached on id as well as on username. So instead of defining two InstanceCache classes like below:

class UserCacheOnId(InstanceCache):
    model = User
    key_fields = ('id',)

# and

class UserCacheOnUsername(InstanceCache):
    model = User
    key_fields = ('username',)

You can define model cache manager class derived from flash.ModelCacheManager for User model.

from flash import ModelCacheManager

class UserCacheManager(ModelCacheManager):
    model = User
    get_key_fields_list = [
        ('id',),
        ('username',),
    ]

and you can use both caches on User.cache . E.g.

user = User.cache.get(id=id)

# and

user = User.cache.get(username=username)

And in fact, User.cache is an instance of UserCacheManager class. In this case, two instnace cache clases gets created behind the scene using get_key_fields_list attribute on UserCacheManager. And in last section, an automatic ModelCacheManager class was being created when we were using User.cache but hadn’t defined any ModelCacheManager for User.