3

この質問の正しいタイトルがわかりません。次のスキーマがあります。

  • 案件は WorkItem と一対多の関係にあります。
  • WorkItem は、LineItem と 1 対 1 (または 1 対 0) の関係にあります。

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 の 2 番目の句が _Null 型のオブジェクトを返すと言っているようですが、"table" 属性を持つものを期待しているようです。

これは私にとってはかなり簡単なように思えますが、明らかな何かが欠けていますか?

アップデート

答えは、primaryjoin行を次のように変更することでした。

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

2 に答える 2

6

and_オーバーロードされていないasを使用してみてくださいand:

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 に答える