@@ -197,11 +197,15 @@ def __init__(self, *args, **kwargs):
197197 return
198198 self .__class__ .polymorphic_super_sub_accessors_replaced = True
199199
200- def create_accessor_function_for_model (model , accessor_name ):
200+ def create_accessor_function_for_model (model , field ):
201201 def accessor_function (self ):
202- objects = getattr (model , "_base_objects" , model .objects )
203- attr = objects .get (pk = self .pk )
204- return attr
202+ try :
203+ rel_obj = field .get_cached_value (self )
204+ except KeyError :
205+ objects = getattr (model , "_base_objects" , model .objects )
206+ rel_obj = objects .get (pk = self .pk )
207+ field .set_cached_value (self , rel_obj )
208+ return rel_obj
205209
206210 return accessor_function
207211
@@ -214,10 +218,14 @@ def accessor_function(self):
214218 type (orig_accessor ),
215219 (ReverseOneToOneDescriptor , ForwardManyToOneDescriptor ),
216220 ):
221+
222+ field = orig_accessor .related \
223+ if isinstance (orig_accessor , ReverseOneToOneDescriptor ) else orig_accessor .field
224+
217225 setattr (
218226 self .__class__ ,
219227 name ,
220- property (create_accessor_function_for_model (model , name )),
228+ property (create_accessor_function_for_model (model , field )),
221229 )
222230
223231 def _get_inheritance_relation_fields_and_models (self ):
0 commit comments