¿Es posible tener polimorfismo multinivel en SQLAlchemy? He aquí un ejemplo:¿Es posible el polimorfismo multinivel en SQLAlchemy?
class Entity(Base):
__tablename__ = 'entities'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
entity_type = Column(Unicode(20), nullable=False)
__mapper_args__ = {'polymorphic_on': entity_type}
class File(Entity):
__tablename__ = 'files'
id = Column(None, ForeignKey('entities.id'), primary_key=True)
filepath = Column(Unicode(255), nullable=False)
file_type = Column(Unicode(20), nullable=False)
__mapper_args__ = {'polymorphic_identity': u'file', 'polymorphic_on': file_type)
class Image(File):
__mapper_args__ = {'polymorphic_identity': u'image'}
__tablename__ = 'images'
id = Column(None, ForeignKey('files.id'), primary_key=True)
width = Column(Integer)
height = Column(Integer)
Cuando llamo Base.metadata.create_all()
, SQLAlchemy plantea el siguiente error:
IntegrityError: (IntegrityError) entities.entity_type may not be NULL`.
Este error desaparece si quito el modelo Image
y la clave polymorphic_on
en File
.
¿Qué ofrece?
Puede tener mejor suerte haciendo esto sin la capa declarativa. – joeforker