SQLAlchemy relationship с моделями в отдельных файлах

может кто-нибудь подсказать, как использовать SQLAlchemy relationship, если каждая модель находится в отдельном файле? Пример:

# ./models/user.py
class UserModel(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    characters: Mapped[list['CharacterModel']] = relationship(back_populates='user')

# ./models/character.py
class CharacterModel(Base):
    __tablename__ = 'characters'
    id: Mapped[int] = mapped_column(primary_key=True)
    user_id: Mapped[int] = mapped_column(ForeignKey('users.id', ondelete='CASCADE'))
    characters: Mapped['UserModel'] = relationship(back_populates='characters')

# ./models/__init__.py
from . import user, character

Ошибка при создании пользователя:

sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper[UserModel(users)], expression 'CharacterModel' failed to locate a name ('CharacterModel'). If this is a class name, consider adding this relationship() to the <class 'python.database.models.user.UserModel'> class after both dependent classes have been defined.

Нигде не могу найти информацию, а в примерах использования модели всегда в одном файле. Буду благодарен за любую информацию.


Ответы (1 шт):

Автор решения: ASKIT

Нашел решение, наверное, единственное правильное. Всё так-же как и в коде выше, но в конце добавляются импорты с комментарием # noqa: E402

# ./models/user.py
class UserModel(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    characters: Mapped[list['CharacterModel']] = relationship(back_populates='user')

from .character import CharacterModel # noqa: E402


# ./models/character.py
class CharacterModel(Base):
    __tablename__ = 'characters'
    id: Mapped[int] = mapped_column(primary_key=True)
    user_id: Mapped[int] = mapped_column(ForeignKey('users.id', ondelete='CASCADE'))
    characters: Mapped['UserModel'] = relationship(back_populates='characters')

from .user import UserModel # noqa: E402


# ./models/__init__.py
from . import user, character
→ Ссылка