До сих пор у меня есть родительский класс Entity
для всех моих классов orm:
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
и mixin 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 не должны иметь дополнительных имен таблиц?
=> Любые другие предложения о том, как получить требуемую структуру наследования?