17

私は宣言型 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ですか?

4

3 に答える 3

28

これらのソリューションを機能させることはできませんでしたが、もっと簡単な方法を見つけました。

from sqlalchemy.ext.declarative import declarative_base

class User(Base):
    # ....
    addresses = relationship("Address",
                         order_by="desc(Address.email)",
                         primaryjoin="Address.user_id==User.id")

ここにあります:http: //docs.sqlalchemy.org/en/latest/orm/extensions/declarative/relationships.html

于 2012-11-14T10:40:26.710 に答える
8

必要なのは、RolePermission オブジェクトのロール属性を順序付けることです。order_by を渡すと、Role クラスで順序が設定されます。

これを試して:

from sqlalchemy.orm import backref

permissionLinks = relationship(RolePermission, backref=backref("role", order_by=name))

後方参照の順序を設定する

于 2011-10-28T18:24:32.290 に答える
0

問題はpermissionLinks関係にあります。でアイテムを注文することRole.nameは、私には意味がありません。

于 2011-07-21T09:44:50.663 に答える