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.
|
# SingleRelatedObjectDescriptor instance.
|
||||||
def __init__(self, related):
|
def __init__(self, related):
|
||||||
self.related = related
|
self.related = related
|
||||||
|
self.cache_name = '_%s_cache' % related.field.name
|
||||||
|
|
||||||
def __get__(self, instance, instance_type=None):
|
def __get__(self, instance, instance_type=None):
|
||||||
if instance is None:
|
if instance is None:
|
||||||
raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name
|
raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name
|
||||||
|
|
||||||
params = {'%s__pk' % self.related.field.name: instance._get_pk_val()}
|
try:
|
||||||
rel_obj = self.related.model._default_manager.get(**params)
|
return getattr(instance, self.cache_name)
|
||||||
return rel_obj
|
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):
|
def __set__(self, instance, value):
|
||||||
if instance is None:
|
if instance is None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user