5

正しく動作する多対多の関係があります。しかし今、私はこの多対多の関係を持つ別のクラスを持つ必要があります。多対多関係への関係の設定

currencies = db.Table('currencies_many', 
    db.Column('id', db.Integer, primary_key=True), 
    db.Column('currency_id', db.Integer, db.ForeignKey('currencies.id')), 
    db.Column('bank_id', db.Integer, db.ForeignKey('banks.id')) 
) 

class Bank(db.Model): 
    __tablename__ = 'banks' 
    id = db.Column(db.Integer, primary_key=True) 
    bank_name = db.Column(db.String(300)) 
    currencies = db.relationship('Currency', secondary=currencies, 
     backref=db.backref('banks', lazy='dynamic')) 

class Currency(db.Model): 
    __tablename__ = 'currencies' 
    id = db.Column(db.Integer, primary_key=True) 
    currency_name = db.Column(db.String(300)) 

私が意味するのは、例えば、注文です。私は多くのものか​​ら多くのものへの関連付けが必要です。

class Order(db.Model): 
    __tablename__ = 'orders' 
    id = db.Column(db.Integer, primary_key=True) 
    bank_currency_identification = db.Column(db.Integer, db.ForeignKey('currencies_many.id')) 

どうすればいいですか?私の例ではbank_currency_identificationのためにdb.relationshipを持っていませんが、それは正しいですか?

+0

外部キーがあります。あなたは関係が必要ではありません、少なくとも私は理由が分かりません。なぜそれを多対多の関係にしようとしていますか?あなたが多対多である必要がある場合は、 'currencies_many'のような別のテーブルを作成することができます – adarsh

答えて

2

ご質問が正しく分かった場合はordersテーブルからcurrencies_manyテーブルを参照したいと考えています。その場合は、currencies_manyテーブルとの外部キー関係が正しいです。

banksテーブルからordersをクエリするときに、何か問題が発生することがあります。 OrderBankとの間、およびOrderCurrencyの間に1対多の関係を作成することは冗長ではあるようですが、私はお勧めします。

bank_id = db.Column(db.Integer, db.ForeignKey('bank.id')) 
currency_id = db.Column(db.Integer, db.ForeignKey('currency.id')) 

そしてBankクラスの

orders = db.relationship('Order', backref='bank') 

これは、あなたのインターフェイスを照会多くのクリーナーを与えます。

bank_orders = bank.orders 

同様に、データモデルをよりクリーンにします。通貨も収められている中間テーブルから注文を照会しなければならないのは厄介です。ちょうど私の2セントですが、理解しやすいDataモデルを持つことは、冗長性を節約するために厄介な関係を作るよりも優れています。