2017-02-26 7 views
1

1対多リレーションシップを構築しようとしているため、それぞれのカフェで多数のレビューが可能です。ただし、SQLAlchemyは関係を定義するときにArgumentErrorを生成します。このエラーを修正するにはどうすればよいですか?SQLAlchemyの関係が発生するバックリファレンスを作成するときに引数エラーが発生する

class Review(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    cafe = db.Column(db.String, db.ForeignKey('cafe.name')) 

class Cafe(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String) 
    reviews = db.relationship(Review, backref='cafe') 
sqlalchemy.exc.ArgumentError: Error creating backref 'cafe' on relationship 'Cafe.cafes': property of that name exists on mapper 'Mapper|Review|review' 

答えて

2

SQLAlchemyのはCafe.cafes関係がReviewcafeと呼ばれるために後方参照を作成しようとすると、それはあなたがcafeをという名前の列を見つけ、それが同じ名前を使用できないというエラーが発生します。

外部キーにあなたの関係/バックレフとは異なる名前を付けます。

cafe_name = db.Column(db.ForeignKey(Cafe.name)) 

また、外部キーとリレーションシップが同じモデルで定義されている場合は、名前の追跡が容易になります。

class Cafe(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String) 

class Review(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    cafe_id = db.Column(db.ForeignKey(Cafe.id)) 
    cafe = db.relationship(Cafe, backref='reviews') 
関連する問題