Ruby on Rails具有“多次通过”关联。例如,
store has_many :shelves
shelf has many :books
store has_many :books, through: :shelves
这将使我们能够调用
store.books
并获得商店中的所有书籍。我想在Flask中复制此功能,但似乎找不到信息。例如,这是用Python编写的一对多关系。店里有很多书架,书架上有很多书。
class Store(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
shelves = db.relationship('Shelf', backref='store')
class Shelf(db.Model):
id = db.Column(db.Integer, primary_key=True)
location = db.Column(db.String(120), nullable=False)
store_id = db.Column(db.Integer, db.ForeignKey('store.id'), nullable=False)
books = db.relationship('Book', backref='shelf')
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
shelf_id = db.Column(db.Integer, db.ForeignKey('shelf.id'), nullable=False)
使用当前编写的代码,我可以调用
store.shelves
和shelf.books
。但是,要阅读书籍,我必须遍历书架并调用.books
。有没有办法在这里呼叫
store.books
? 最佳答案
一种选择是将Shelf
用作“辅助”表并创建单边的“多对多”关系,尽管实际上一对表之间存在一个一对多的关系:
class Store(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
shelves = db.relationship('Shelf', backref='store')
books = db.relationship('Book', secondary='shelf', viewonly=True)
最好仅将关系视为视图,因为如果将其附加到
Store.books
列表,则无法确定书籍应转到哪个书架。这与Rails定义关系的方式非常接近。关于python - Flask通过模型关联有很多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54937219/