from typing import TYPE_CHECKING, Optional from sqlalchemy import ForeignKey, Table, Column from sqlalchemy.orm import mapped_column, Mapped, relationship from models import BaseModel if TYPE_CHECKING: from models import Deal class DealGroup(BaseModel): __tablename__ = 'deal_groups' id: Mapped[int] = mapped_column( primary_key=True ) name: Mapped[Optional[str]] = mapped_column( nullable=True ) lexorank: Mapped[str] = mapped_column( nullable=False ) deals: Mapped[list["Deal"]] = relationship( back_populates='group', secondary='deal_relations' ) deal_relations = Table( 'deal_relations', BaseModel.metadata, Column('deal_id', ForeignKey('deals.id'), primary_key=True, unique=True), Column('group_id', ForeignKey('deal_groups.id'), primary_key=True) )