mirror of
https://github.com/django/django.git
synced 2025-07-05 18:29:11 +00:00
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. git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7171 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
33a0862215
commit
a9008f8928
@ -125,14 +125,19 @@ class SingleRelatedObjectDescriptor(object):
|
||||
# SingleRelatedObjectDescriptor instance.
|
||||
def __init__(self, related):
|
||||
self.related = related
|
||||
self.cache_name = '_%s_cache' % related.field.name
|
||||
|
||||
def __get__(self, instance, instance_type=None):
|
||||
if instance is None:
|
||||
raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name
|
||||
|
||||
params = {'%s__pk' % self.related.field.name: instance._get_pk_val()}
|
||||
rel_obj = self.related.model._default_manager.get(**params)
|
||||
return rel_obj
|
||||
try:
|
||||
return getattr(instance, self.cache_name)
|
||||
except AttributeError:
|
||||
params = {'%s__pk' % self.related.field.name: instance._get_pk_val()}
|
||||
rel_obj = self.related.model._default_manager.get(**params)
|
||||
setattr(instance, self.cache_name, rel_obj)
|
||||
return rel_obj
|
||||
|
||||
def __set__(self, instance, value):
|
||||
if instance is None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user