0

次の関係を記述できるSQLAlchemy/Elixerモデルを定義しようとしています。SSPテーブルがあり、POCテーブルへの複数の外部キーがあります。SSPオブジェクト内でManyToOne関係を正しく定義しました(正しく定義できるようにしましたSSP.get(1).action.first_name)。また、この関係の反対側も追加したいと思います。ここでは、POC.get(1).csaこのPOCがidPOCCSAとして定義されているSSPオブジェクトのリストのようなものを実行して返すことができます。

これはポリモーフィックな関連付けに最適であることはわかっていますが、DBスキーマをまったく変更することはできません(type関連付けの列を持つ新しいpoc2sspテーブルを作成します)。

class POC(Entity):
  using_options(tablename = 'poc', autoload = True)

  # These two line visually display my "issue":
  # csa = OneToMany('SSP')
  # action = OneToMany('SSP')


class SSP(Entity):
  '''
  Many to One Relationships:
  - csa: ssp.idPOCCSA = poc.id
  - action: ssp.idPOCAction = poc.id
  - super: ssp.idSuper = poc.id
  '''
  using_options(tablename = 'spp', autoload = True)

  csa = ManyToOne('POC', colname = 'idPOCCSA')
  action = ManyToOne('POC', colname = 'idPOCAction')
  super = ManyToOne('POC', colname = 'idPOCSuper')

これを達成するためのアイデアはありますか?Elixer FAQには、primaryjoinパラメーターとforeign_keysパラメーターを利用した良い例がありますが、ドキュメントでそれらを見つけることができません。私は、OneToMany()がManyToOne()のようにcolnameパラメーターをサポートすることを望んでいました。少し冗長ではありません。

4

1 に答える 1

1

次のことを試してください。

class POC(Entity):
  # ...
  #declare the one-to-many relationships
  csas = OneToMany('SSP')
  actions = OneToMany('SSP')
  # ...

class SSP(Entity):
  # ...
  #Tell Elixir how to disambiguate POC/SSP relationships by specifying
  #the inverse explicitly.
  csa = ManyToOne('POC', colname = 'idPOCCSA', inverse='csas')
  action = ManyToOne('POC', colname = 'idPOCAction', inverse='actions')
  # ...    
于 2009-10-05T14:59:56.213 に答える