Я использую декларативную SQLAlchemy, и у меня есть три модели: Role
, Permission
и RolePermission
.В моей модели Role
у меня есть следующее:
class Role(Base):
name = Column(u'NAME', VARCHAR(50), nullable=False, unique=True)
permissionLinks = relationship(RolePermission, backref="role", order_by=name)
permissions = relationship(Permission, backref=backref("roles",
order_by=name), secondary=RolePermission.__table__,
order_by=Permission.name)
Теперь объявление permissions
работает нормально, и разрешения, связанные с ролью, сортируются, как я и ожидаю (по имени).Однако permissionLinks
завершается ошибкой со следующей ошибкой:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Не удалось связать многокомпонентный идентификатор «ROLES.NAME». (4104) (SQLExecDirectW); [42000] [Microsoft] [Драйвер ODBC SQL Server] [Оператор SQL Server] не удалось подготовить. (8180) ') u'SELECT [ROLES_PERMISSIONS]. [ROLE_ID] AS [ROLES_PERMISSIONS_ROLE_ID], [ROLES_PERMISSIONS]. [PERMISSION_ID] AS [ROLES_PERMISSIONS_PERMISSION_ID], [ROLES_PERMISSIONS]. [IS_DENIED] AS [ROLES_PERMISSIONS_IS_DENIED] \ Nfrom [ROLES_PERMISSIONS] \ Nwhere [ROLES_PERMISSIONS]. [ROLE_ID] =?ЗАКАЗАТЬ [РОЛЕС]. [ИМЯ] '(19,)
Проблема в том, что Role
не объединяется, поэтому он не может отсортировать по Role.name
.Я попытался указать primaryjoin=id == RolePermission.id1
, но это ничего не изменило.Как я могу указать объединение для этого отношения, чтобы я мог сортировать по полю в одной из объединенных таблиц (а именно, Role.name
)?