@@ -201,11 +201,15 @@ def __init__(self, *args, **kwargs):
201201 return
202202 self .__class__ .polymorphic_super_sub_accessors_replaced = True
203203
204- def create_accessor_function_for_model (model , accessor_name ):
204+ def create_accessor_function_for_model (model , field ):
205205 def accessor_function (self ):
206- objects = getattr (model , "_base_objects" , model .objects )
207- attr = objects .get (pk = self .pk )
208- return attr
206+ try :
207+ rel_obj = field .get_cached_value (self )
208+ except KeyError :
209+ objects = getattr (model , "_base_objects" , model .objects )
210+ rel_obj = objects .get (pk = self .pk )
211+ field .set_cached_value (self , rel_obj )
212+ return rel_obj
209213
210214 return accessor_function
211215
@@ -218,10 +222,16 @@ def accessor_function(self):
218222 type (orig_accessor ),
219223 (ReverseOneToOneDescriptor , ForwardManyToOneDescriptor ),
220224 ):
225+ field = (
226+ orig_accessor .related
227+ if isinstance (orig_accessor , ReverseOneToOneDescriptor )
228+ else orig_accessor .field
229+ )
230+
221231 setattr (
222232 self .__class__ ,
223233 name ,
224- property (create_accessor_function_for_model (model , name )),
234+ property (create_accessor_function_for_model (model , field )),
225235 )
226236
227237 def _get_inheritance_relation_fields_and_models (self ):
0 commit comments