2015-03-14 9 views
6

Ho due chiavi esterne in un'entità che si riferisce ad un'altra entità. Ecco come appareFlask foreign_keys mostra ancora AmbiguousForeignKeysError

class Review(db.Model): 
     __tablename__ = 'Review' 
     id = db.Column(db.Integer, primary_key = True) 
     user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False) 
     business_user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False) 
     user = db.relationship('User', foreign_keys=[user_id]) 
     business_user = db.relationship('User', foreign_keys=[business_user_id]) 

e

class User(db.Model): 
    __tablename__ = 'User' 
    id = db.Column(db.Integer, primary_key = True) 
    reviews = db.relationship('Review', backref='user', 
          lazy='dynamic') 

Tuttavia, mi mostra ancora un errore che dice

ci sono più percorsi di chiave esterna che collegano le tabelle. Specificare l'argomento 'FOREIGN_KEYS', fornendo un elenco di quelle colonne che dovrebbero essere contate come contenente un riferimento chiave esterna al genitore tavolo

La soluzione di cui sopra è quello che ottengo da altri posti. Ho controllato e cambiato molte volte, e ancora senza fortuna. Mi chiedo se è già corretto o c'è qualcosa che mi manca. Hai bisogno di aiuto

+0

Hai mai trovato la soluzione a questo? Ho passato un po 'di tempo a cercare una risposta, ma non sono riuscito a farlo funzionare. –

+0

Ho pubblicato la risposta –

risposta

6

Infine, ho trovato la soluzione alternativa dopo aver cercato di capire. Nel mio caso, non devo inserire backref nella classe Review. Invece, dovrei mettere l'utente backref nella classe User stessa. Quindi, dovrebbe apparire come sotto

class Review(db.Model): 
    __tablename__ = 'Review' 
    id = db.Column(db.Integer, primary_key = True) 
    user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False) 
    business_user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False) 
    user = relationship('User', backref='user_reviews', foreign_keys=user_id) 
    business_user = relationship("User", backref='business_user_reviews', foreign_keys=[business_user_id]) 

class User(db.Model): 
    __tablename__ = 'User' 
    id = db.Column(db.Integer, primary_key = True) 

Qui, entrambi i tipi di Utente hanno molte Recensioni. Poi, quando ho bisogno di ottenere l'elenco di recensioni di entrambi User, quello che posso fare è

user = User.query.get(id) 
user_reviews = User.user_reviews 
business_user_reviews = user.business_user_reviews 

E io non sono più in esecuzione in questo errore.