4

SQLAlchemy を使用して、両端の関連付けプロキシとの関係に関するメタデータを含むマッピング テーブルを使用して、単純な多対多の関係を作成しようとしています。しかし、私はそれを機能させることができないようです。これは、私がそれを理解しようとして取り組んできたおもちゃの例です。

Base = declarative_base()


def bar_creator(bar):

    _ = FooBar(bar=bar)
    return bar


class Foo(Base):

    __tablename__ = 'foo'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    bars = association_proxy('bar_associations', 'bar',
                             creator=bar_creator)


def foo_creator(foo):

    _ = FooBar(foo=foo)
    return foo


class Bar(Base):

    __tablename__ = 'bar'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    foos = association_proxy('foo_associations', 'foo',
                             creator=foo_creator)


class FooBar(Base):

    __tablename__ = 'fooBar'

    foo_id = Column(Integer, ForeignKey('foo.id'), primary_key=True)
    bar_id = Column(Integer, ForeignKey('bar.id'), primary_key=True)
    bazed = Column(Boolean)
    foo = relationship(Foo, backref='bar_associations')
    bar = relationship(Bar, backref='foo_associations')


Base.metadata.create_all(engine)
make_session = sessionmaker(bind=engine)
session = make_session()
foo0 = Foo(name='foo0')
session.add(foo0)
bar0 = Bar(name='bar0')
foo0.bars.append(bar0)

creator関数を追加し__init__て、実際のユースケースでは機能しない (単一の引数を取る) を記述しないようFooBarにしました。それに関連付けられたリンク テーブル インスタンスがあります。明らかな何かが欠けているだけだと確信しています(または、できないことをやろうとしているだけかもしれません)が、ドキュメントとグーグルをよく調べた後、なぜそれが機能しないのかわかりません. 私は何を間違っていますか?

4

1 に答える 1

1

あなたの問題は次のとおりです。それは、またはではなくcreator、の新しいインスタンスを返す必要があります。FooBarbarfoo

def bar_creator(value):
    return FooBar(bar=value)

と同様ですfoo_creator

于 2013-08-25T11:47:49.723 に答える