3

Base クラスを変更して、すべてのテーブルにある 3 つの既定の列を含めます。

class Base(object):
    id            = Column(Integer, primary_key=True)
    date_created  = Column(DateTime, default=func.current_timestamp())
    date_modified = Column(DateTime, default=func.current_timestamp(),
                                     onupdate=func.current_timestamp())

2 つの列の間に 1 対多の関係があります。

class User(Base):
    __tablename__ = 'users'

    name          = Column(Text)
    password      = Column(Text)

    items = relationship("Item", backref=
                 backref('user', order_by=date_modified),
                                 cascade="all, delete, delete-orphan")

class Item(Base):
    __tablename__ = 'items'

    user_id       = Column(Integer, ForeignKey('users.id'))
    title         = Column(Text)

各テーブルのクラス内で明示的に定義された date_created および date_modified 列がある場合、これは正常に機能していました。ただし、ベースから継承すると機能せず、次のエラーが発生します。

NameError : 名前 ' date_modified ' が定義されていません

order_by=column_from_mixin( )を使用して後方参照関係をソートするにはどうすればよいorder_by=date_modifiedですか?

ありがとうございました。

4

1 に答える 1

5

次のいずれかを使用できます。

backref('user', order_by=lambda: User.date_modified)
backref('user', order_by='User.date_modified')

クラス属性は、クラス名 を使用してアクセスできますUser.date_modifiedが、クラス自体はその時点ではまだ定義されていません。callable を提供すると (2 番目のケースは内部で callable に変換されます)、マッピングが最初に使用されるまで名前解決が延期され、その時点でマップされたすべてのクラスが定義されます。

于 2013-02-24T17:35:35.303 に答える