私は宣言型 SQLAlchemy を使用しており、 、 、および の 3 つのモデルが 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 Driver][SQL Server] マルチパート識別子 "ROLES.NAME" could not be bind. (4104) ( SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepare. (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] = ? ORDER BY [ROLES].[NAME]' (19,)
問題は、Role
結合されていないため、並べ替えができないことRole.name
です。を指定してみprimaryjoin=id == RolePermission.id1
ましたが、何も変わらないようでした。結合されたテーブルの 1 つのフィールド (つまり、) で並べ替えることができるように、このリレーションシップで結合を指定するにはどうすればよいRole.name
ですか?