ndb.StructuredProperty não está chamando métodos de subclasse ndb.PolyModel
Ao armazenar superclasses de ndb.Polymodel como ndb.StructuredProperty, não consegui acessar métodos de subclasse; Os métodos da superclasse foram chamados em vez disso e aumentaram o NotImplementedError's. Aqui está uma versão abreviada do que estou tentando realizar.
class Recipient(polymodel.PolyModel):
name = ndb.StringProperty()
def PrettyPrinting(self):
raise NotImplementedError, 'Rawr'
class ShippingRecipient(Recipient):
address_line_one = ndb.StringProperty()
#there are other properties, but they aren't necessary here.
def PrettyPrinting(self):
return 'Hey, this should be called.'
class LocalRecipient(Recipient):
distribution_location = ndb.StringProperty()
#same deal, more attributes, but useless for this example.
def PrettyPrinting(self):
return 'Hey this should be called.'
class Shipment(ndb.Model):
recipient = ndb.StructuredProperty(Recipient)
Agora, digamos que salvei uma remessa e armazenei um ShippingRecipient no campo de destinatário da remessa. No armazenamento de dados, a remessa recipient.class == ['Recipient', 'ShippingRecipient']. Quando eu chamo:
shipment = Shipment.get_by_id('some_key')
shipment.recipient.PrettyPrinting()
O NotImplementedError é gerado em vez da implementação ShippingRecipient de PrettyPrinting (...). Eu quero que o método de subclasse seja chamado ao acessar o campo de destinatário da remessa. Existe uma maneira de obter o método da subclasse? Eu sei que dizer que a propriedade estruturada é do tipo Recipient faz com que o método da superclasse seja chamado, mas talvez eu não entenda completamente porque eles armazenariam a subclasse no atributo recipient.class.