from typing import TYPE_CHECKING from sqlalchemy import Table, Column, ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship from models.base import BaseModel if TYPE_CHECKING: from models import Project project_module = Table( 'project_module', BaseModel.metadata, Column('project_id', ForeignKey('projects.id')), Column('module_id', ForeignKey('modules.id')), ) class Module(BaseModel): __tablename__ = 'modules' id: Mapped[int] = mapped_column(primary_key=True) key: Mapped[str] = mapped_column(unique=True, nullable=False) is_deleted: Mapped[bool] = mapped_column(default=False) projects: Mapped[list['Project']] = relationship( 'Project', uselist=True, secondary='project_module', back_populates='modules', lazy='noload', )