DjangoのForeinKeyとかキャッシュとか改

毎回キャッシュアクセスはしたくない

前回、DjangoのForeinKeyとかキャッシュとか - ま、そんな日もあるさを書いたんですけど

name = player.cached_community.name
id = player.cached_community.id

みたいに使うと複数回キャッシュを見に行ってしまうので

community = player.cached_community
name = community.name
id = community.id

みたいに変数にコピーして使っていました。
でも、毎回これは面倒!


改良してみた

class Community(AbustractCachedModel):
    name = models.CharField(max_length=50)

class Player(AbustractCachedModel):
    name = models.CharField(max_length=50)
    community = models.ForeinKey(Community)
    community_cache = None
    @property
    def cached_community(self):
        if self.community_cache is None:
            self.community_cache = Community.get(self.community_id)
        return self.community_cache

これで、何も考えずに

name = player.cached_community.name
id = player.cached_community.id

みたいに使えばOK。


気をつけること
communityを更新しても自動ではcached_communityは更新されないので、そこんとこだけ注意。