flask 多对多
在flask中实现字段间多对多关系, 需要手动创建中间的辅助表, 对于这个辅助表, 强烈建议不要使用模型,而是采用一个实际的表, 因为这个辅助表是永远不会被实例化使用的.
- 文档中提供的例子:
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('page_id', db.Integer, db.ForeignKey('page.id'))
)
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
# secondary: 在多对多关系, 指定关联表的名称
tags = db.relationship('Tag', secondary=tags, backref=db.backref('pages', lazy='dynamic'), lazy='dynamic')
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
- 例2
文章和收藏
# 创建一个收藏的中间表
collections = db.Table( 'collections',
db.Column('user.id', db.Integer, db.ForeignKey('user.id')),
db.Column('post_id', db.Integer, db.ForeignKey('posts.id'))
)
class User(db.Model, UserMixin):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
# secondary: 在多对多关系, 指定关联表的名称
favorite = db.relationship('Posts', secondary='collections', backref=db.backref('users'), lazy='dynamic')
class Posts(db.Model):
id = db.Column(db.Integer, primary_key=True)