2017-03-07 7 views
0

:私は巣にFooBarのためのマシュマロスキーマ内のクラスはFooまたはバーをしようとするとネストされたマシュマロのフィールドとSQLAlchemyの関係

class FooBar(Model): 
    __tablename__ = ‘foobar’ 
    id = Column('id', Integer, primary_key=True) 

    foonr = Column('foonr', Integer, ForeignKey('foo.nr'), nullable=False) 
    barnr = Column('barnr', String, ForeignKey('bar.nr'), nullable=False) 

class Foo(Model): 
    __tablename__ = ‘foo’ 
    nr = Column('nr', Integer, primary_key=True) 
    foo_name = Column(‘name’,String) 


class Bar(Model): 
    __tablename__ = ‘bar’ 
    nr = Column('nr', Integer, primary_key=True) 
    bar_name = Column(‘name’,String) 
    foo_bar = relationship('foobar', uselist=False) 

私は(何も結果が届きません辞書には、FooまたはBarクラスへの参照はありません)。

class FooBarSchema(Schema): 
    id = fields.Int() 
    foo = fields.Nested('FooSchema', many=False) 
    bar = fields.Nested('BarSchema', many=False) 

FooBarSchemaの結果でFooとBarのクラスを取得するにはどうすればよいですか?

答えて

0

Ok ...問題の解決方法を教えてあげます。

class FooBar(Model): 
    __tablename__ = 'foobar' 
    id = Column('id', Integer, primary_key=True) 
    foonr = Column('foonr', Integer, ForeignKey('foo.nr'), nullable=False) 
    barnr = Column('barnr', String, ForeignKey('bar.nr'), nullable=False) 
    foo = relationship("Foo", uselist=False) 
    bar = relationship("Bar", uselist=False) 

class FooBarSchema(Schema): 
    id = fields.Int() 
    foo = fields.Nested('FooSchema', many=False) 
    bar = fields.Nested('BarSchema', many=False) 

あなたのコードを分析してみると、私たちはそれをもっとpythonicにすることができると思います。

関連テーブルに余分なデータがない場合にのみ、私たちはいくつか変更することができます。

Many To Many関係のSQLAlchemy docを見ると、relationship()secondaryパラメータを使用できます。 私たちは、あなたが現在持っているとクラスそのようなBarとしてクラスを維持する必要があります:

class Bar(Model): 
    __tablename__ = 'bar' 
    nr = Column('nr', Integer, primary_key=True) 
    bar_name = Column('name',String) 
    foos = relationship("Foo", secondary="foobar", backref="bars") 

だからBar.foosに我々はFooオブジェクトのリストを持っている、とbackrefFoo.barsBarリストを持ってすることが可能となります。

今度はBarSchemaFooSchemaのクラスを設定する必要があります。

excludeは再帰的な問題を避けるためです。

関連する問題