直到现在,我的所有orm类都有一个父类Entity
:
class AbstractEntity():
id = Column(Integer, primary_key=True)
@declared_attr
def __tablename__(self):
return AbstractEntity.table_name_for_class(self)
...
Entity = declarative_base(cls=AbstractEntity)
class Drink(Entity):
name = Entity.stringColumn()
我希望我的类仅继承自单个类Entity
,而不继承自类Base
和混合类Entity
。很好。
但是,现在我想引入另一个父类EntityAssociation
,我可以将其用作我的所有关联类的父类,这些关联类用于多对多关系,例如
class DrinkIngretients(EntityAssociation):
drink_id = Entity.foreign_key(Drink)
ingredient_id = Entity.foreign_key(Ingredient)
...
类EntityAssociation
应该继承自Base = declarative_base(),而不应该继承自AbstractEntity
。 (它不应包含在id
中定义的AbstractEntity
列。)
=>如何实现该继承结构?
我尝试过
class AbstractEntity():
id = Column(Integer, primary_key=True)
@declared_attr
def __tablename__(self):
return AbstractEntity.table_name_for_class(self)
...
Base = declarative_base()
class Entity(Base, AbstractEntity):
pass
class EntityAssociation(Base):
pass
但是
的行为Entity = declarative_base(cls=AbstractEntity)
和
class Entity(Base, AbstractEntity):
pass
似乎有所不同。
类没有指定表或表名,并且不继承自现有的表映射类。
=>如何指定Entity和EntityAssociation类不应具有额外的表名?
=>关于如何获得想要的继承结构的其他建议?
答案 0 :(得分:0)
__abstract__
标志可以达到目的:
class EntityRelation(Base):
__abstract__ = True
class Entity(Base, AbstractEntity):
__abstract__ = True