2016-04-30 5 views
1

bekomme ich folgende Fehlermeldung:Wie kann ich zweimal auf eine Fremdschlüsseltabelle verweisen?

u'detail': u"One or more mappers failed to initialize - can't proceed with initialization of other mappers. Original exception was: Could not determine join condition between parent/child tables on relationship Vote.user - there are multiple foreign key paths linking the tables. Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference to the parent table."

Tabelle A definiert wird:

B
class User(postgres.Model): 

    def __init__(self, 
     name 
    ): 
     self.name = name 

    id = postgres.Column(postgres.Integer , primary_key=True , autoincrement=True) 
    name = postgres.Column(postgres.String(32) , nullable=False , unique=True) 

Tabelle wird wie folgt definiert:

class Vote(postgres.Model): 

    def __init__(self, 
     user_id, 
     responder_id, 
     #timestamp_request, 
     #timestamp_respond, 
     value 
    ): 
     self.user_id = user_id 
     self.responder_id = responder_id 
     #self.timestamp_request = timestamp_request 
     #self.timestamp_respond = timestamp_respond 
     self.value = value 

    id = postgres.Column(postgres.Integer , primary_key=True , autoincrement=True) 
    user_id = postgres.Column(postgres.Integer , postgres.ForeignKey('user.id')) 
    user = postgres.relationship(User , backref=postgres.backref('votes_user')) 
    responder_id = postgres.Column(postgres.Integer , postgres.ForeignKey('user.id')) 
    responder = postgres.relationship(User , backref=postgres.backref('votes_responder')) 
    timestamp_request = postgres.Column(postgres.DateTime , default=datetime.datetime.utcnow , nullable=False , unique=False) 
    timestamp_respond = postgres.Column(postgres.DateTime , default=datetime.datetime.utcnow , onupdate=datetime.datetime.utcnow , nullable=False , unique=False) 
    value = postgres.Column(postgres.Enum('up' , 'down' , name='vote_value_enum') , nullable=True) 

Antwort

2

SQLAlchemy ist nicht in der Lage, die Beziehung zu entdecken Pfad.

user_id = Column(ForeignKey('user.id')) 
user = relationship(User, backref=backref('votes_user')) 
responder_id = Column(ForeignKey('user.id')) 
responder = relationship(User, backref=backref('votes_responder')) 

Haben die responder Beziehung beitreten muss responder_id oder user_id verwenden? Ich weiß, dass es für uns offensichtlich ist, aber SQLAlchemy berücksichtigt Spaltennamen hier nicht. Sie können responder_id als foobar umbenennen und es wird keinen Unterschied machen.

Definieren Sie die Fremdschlüssel, die Sie für jede Beziehung verwenden möchten.

user = relationship(User, foreign_keys=[user_id], backref=backref('votes_user')) 
responder = relationship(User, foreign_keys=[responder_id], backref=backref('votes_responder')) 
Verwandte Themen