Django

Code

Changeset 7171

Show
Ignore:
Timestamp:
02/28/08 07:21:33 (10 months ago)
Author:
mtredinnick
Message:

queryset-refactor: Added caching for reverse-one-to-one lookups.

This is the only type of reverse lookup where caching makes sense might make
some kinds of model inheritance interactions more database friendly.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/queryset-refactor/django/db/models/fields/related.py

    r7170 r7171  
    126126    def __init__(self, related): 
    127127        self.related = related 
     128        self.cache_name = '_%s_cache' % related.field.name 
    128129 
    129130    def __get__(self, instance, instance_type=None): 
     
    131132            raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name 
    132133 
    133         params = {'%s__pk' % self.related.field.name: instance._get_pk_val()} 
    134         rel_obj = self.related.model._default_manager.get(**params) 
    135         return rel_obj 
     134        try: 
     135            return getattr(instance, self.cache_name) 
     136        except AttributeError: 
     137            params = {'%s__pk' % self.related.field.name: instance._get_pk_val()} 
     138            rel_obj = self.related.model._default_manager.get(**params) 
     139            setattr(instance, self.cache_name, rel_obj) 
     140            return rel_obj 
    136141 
    137142    def __set__(self, instance, value):