0

モデルUserとモデルがありThingます。AUserは0個以上Thingのを所有できます。AThingは0個以上Userのsによって所有されている可能性があります。通常、 sをsにThing_Ownershipリンクする3番目のテーブルを追加しますが、SQLAlchemyのbackref機能を利用して、インスタンスがある場合に、に属するsのリストを取得できるようにします。UserThingUsergeorgegeorge.inventoryThinggeorge

これを実行するための最良の方法は何ですか、または3番目のモデルを追加して、関連する関係User.inventoryの3番目のモデルの検索として実装する必要がありますか?Thing_Ownership

4

1 に答える 1

3

多対多の関係に関するSQLAlchemyのドキュメントをチェックしてください-それはあなたが探しているものを正確に実行するはずです。

したがって、とのモデルがある場合はUserThing関係に2次パラメーターを設定できます。

from sqlalchemy import Table, Integer, Column, ForeignKey
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

association_table = Table('association', Base.metadata,
    Column('user_id', Integer, ForeignKey('user.id')),
    Column('thing_id', Integer, ForeignKey('thing.id'))
)

class User(Base):
    __tablename__ = 'user'
    # Whatever you need in this model
    inventory = relationship('Thing', secondary = association_table, backref = 'users')

class Thing(Base):
    __tablename__ = 'thing'
    # Whatever you need in this model

次に、を呼び出すことにより、インスタンス化されThingたに属するのリストにアクセスできます。Usergeorgegeorge.inventory

お役に立てれば。

編集:あなたの質問を読み直して、あなたが使いたいと思ったことを確認しbackrefました-それを行うためのコードを追加しました。
編集2:本当に重要な部分を省略しました。

于 2012-04-22T02:17:34.000 に答える