from sqlalchemy import ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship from models_wms.base import BaseModel class PlaceType(BaseModel): __tablename__ = 'place_type' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(nullable=False) parent_id: Mapped[int] = mapped_column( ForeignKey('place_type.id'), nullable=True, ) parent: Mapped['PlaceType'] = relationship( 'PlaceType', lazy='noload', back_populates='children', primaryjoin='PlaceType.parent_id == PlaceType.id', remote_side=[id], ) children: Mapped[list['PlaceType']] = relationship( 'PlaceType', lazy='selectin', back_populates='parent', ) class Place(BaseModel): __tablename__ = 'place' id: Mapped[int] = mapped_column(primary_key=True) number: Mapped[int] = mapped_column(nullable=False) place_type_id: Mapped[int] = mapped_column( ForeignKey('place_type.id'), nullable=False, ) place_type: Mapped[PlaceType] = relationship( 'PlaceType', lazy='joined', ) parent_id: Mapped[int] = mapped_column( ForeignKey('place.id'), nullable=True, ) parent: Mapped['Place'] = relationship( 'Place', lazy='noload', back_populates='children', primaryjoin='Place.parent_id == Place.id', remote_side=[id], ) children: Mapped[list['Place']] = relationship( 'Place', lazy='selectin', back_populates='parent', )