@@ -636,6 +636,12 @@ def new_entity(key):
636636
637637 continue
638638
639+ if prop is None and kind != model_class .__name__ :
640+ # kind and model_class name do not match, so this is probably a
641+ # polymodel. We need to check if the prop belongs to the subclass.
642+ model_subclass = Model ._lookup_model (kind )
643+ prop = getattr (model_subclass , name , None )
644+
639645 def base_value_or_none (value ):
640646 return None if value is None else _BaseValue (value )
641647
@@ -4357,7 +4363,14 @@ def _from_base_type(self, value):
43574363 value = entity_value
43584364 if not self ._keep_keys and value .key :
43594365 value .key = None
4360- return _entity_from_ds_entity (value , model_class = self ._model_class )
4366+ model_class = self ._model_class
4367+ kind = self ._model_class .__name__
4368+ if "class" in value and value ["class" ]:
4369+ kind = value ["class" ][- 1 ] or model_class
4370+ if kind != self ._model_class .__name__ :
4371+ # if this is a polymodel, find correct subclass.
4372+ model_class = Model ._lookup_model (kind )
4373+ return _entity_from_ds_entity (value , model_class = model_class )
43614374
43624375 def _prepare_for_put (self , entity ):
43634376 values = self ._get_user_value (entity )
0 commit comments