如何在SQLAlchemy中使用mixin类的列名作为backref(.., order_by=..)?
我修改了基础类,添加了三个默认的列,这些列是我所有表格都有的:
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())
我有两个列之间的一对多关系:
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
)来排序这个反向关系呢?
谢谢。
1 个回答
5
你可以使用这两种方式:
backref('user', order_by=lambda: User.date_modified)
backref('user', order_by='User.date_modified')
类的属性可以通过类名来访问,比如 User.date_modified
,但是在那时类本身还没有被定义。提供可调用的东西(第二种情况在内部会转换为可调用的)会把名字的解析推迟到第一次使用这些映射的时候,这时所有的映射类都已经定义好了。