3

不确定这个问题的正确标题应该是什么。我有以下架构:

  • 事务与工作项具有一对多的关系。
  • WorkItems 与 LineItems 具有一对一(或一零)关系。

我正在尝试在 Matters 和 WorkItems 之间创建以下关系

Matter.unbilled_work_items = orm.relation(WorkItem,
  primaryjoin = (Matter.id == WorkItem.matter_id) and (WorkItem.line_item_id == None),
  foreign_keys = [WorkItem.matter_id, WorkItem.line_item_id],
  viewonly=True
)

这抛出:

AttributeError: '_Null' object has no attribute 'table'

这似乎是在说 primaryjoin 中的第二个子句返回一个 _Null 类型的对象,但它似乎期待具有“表”属性的东西。

这对我来说似乎应该很简单,我是否遗漏了一些明显的东西?

更新

答案是将primaryjoin行更改为:

primaryjoin = "and_(Matter.id == WorkItem.matter_id, WorkItem.line_item_id == None)"
4

2 回答 2

6

尝试使用and_asand没有重载:

and_((Matter.id == WorkItem.matter_id), (WorkItem.line_item_id == None))
于 2010-05-19T08:11:40.310 回答
1

除了 _Null 问题,这需要左外连接才能正确执行。我已经决定 unbilled_work_items 应该是一个执行查询并返回结果的属性。

# like this

@property
def unbilled_work_items(self):
  return Session.object_session(self).query.filter(...).all()
于 2010-05-19T09:37:47.910 回答