5

Ho questa relazione molti-a-molti che funziona correttamente. Tuttavia, ora ho bisogno di avere un'altra classe con una relazione a questo molti a molti.Imposta relazione a relazione molti-a-molti

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)) 

Quello che voglio dire è, ad esempio, un ordine, ho bisogno di avere l'associazione di molti a molti.

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')) 

Come posso farlo? Nel mio esempio non ho db.relationship per bank_currency_identification, è corretto?

+0

Si dispone di una chiave esterna. Non hai bisogno di una relazione, almeno non vedo perché. Perché stai cercando di fare un rapporto da molti a molti? Se hai bisogno che sia molti a molti, potresti creare un'altra tabella come 'currencies_many' – adarsh

risposta

2

Quindi, se ho capito bene la tua domanda, vuoi fare riferimento alla tabella currencies_many dalla tua tabella orders. In tal caso, si è corretti se si ha una relazione di chiave esterna con la tabella currencies_many.

Tuttavia, lungo la strada è possibile che si verifichino dei problemi quando si desidera interrogare orders dalla tabella banks. Suggerirei, anche se sembra ridondante, di creare una relazione uno-a-molti tra Order e Bank nonché tra Order e Currency.

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

E poi in Bank classe

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

questo ti dà un'interfaccia interrogazione molto più pulito.

bank_orders = bank.orders 

Così come rende il vostro modello di dati più pulito. Sarebbe scomodo dover interrogare gli ordini da una tabella intermedia che ospita anche la valuta. Solo i miei due centesimi, ma avere un modello dati facile da capire è meglio che fare relazioni scomode per risparmiare qualche ridondanza.

Problemi correlati