5

私は Pyramid + SQLAlchemy を使用しており、次のように設定しています

from sqlalchemy import orm
from __init__ import user_table  
from device import Device

class User(object):
  def __repr__(self):
    return 'User: ' + self.username

orm.mapper(User, user_table, properties={
  'devices': orm.relation(Device, backref='owner')
})

にアクセスするときにフィルターを追加するにはどうすればよいuser.devicesですか? を試すとuser.devices.filter(Device.platform==1).all()、次のエラーが表示されます。

'InstrumentedList' object has no attribute 'filter'
4

1 に答える 1

5

クエリ対応プロパティを使用できます。

class User(object):
    def __repr__(self):
        return 'User: ' + self.username

    # property
    @property
    def devices_filtered(self):
        return object_session(self).query(Device).with_parent(self).filter(Device.platform==1).all()

    # or simply a method
    def devices_filtered(self, platform):
        return object_session(self).query(Device).with_parent(self).filter(Device.platform==platform).all()

または動的リレーションシップ ローダーを参照してください。

orm.mapper(User, user_table, properties={
  'devices': orm.relation(Device, backref='owner', lazy='dynamic')
})

# ...
user = session.query(User).get(_some_user_id)
devices = user.devices.filter(Device.platform==platform).all()

トピックに関する完全な説明については、参照ドキュメントを参照してください。

于 2013-03-05T08:25:45.357 に答える