我正在创建一个类似于应用程序的博客,我需要有能够编辑标签的文章,删除标签也会反映文章的变化。我正在使用Flask-SQLAlchemy和PostgresSQL。
我尝试了很多但我找不到任何东西,但我并没有完全遵循文档中给出的内容。 (http://pythonhosted.org/Flask-SQLAlchemy/models.html#many-to-many-relationships)
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)
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('pages', lazy='dynamic'))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
但这让我觉得我必须使用多对多的关系。有人可以解释一下吗?谢谢!
答案 0 :(得分:0)
原始代码是正确的,类似的东西也可以。如果这将是models.py
db = SQLAlchemy(app)
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('post_id', db.Integer, db.ForeignKey('post.id'))
)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), index=True, unique=True)
body = db.Column(db.String(500), index=True)
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('posts', lazy='dynamic'))
def __repr__(self):
return '<Post %r %r>' % (self.title, self.tags)
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), index=True, unique=True)
def __repr__(self):
return '<Tag %r>' % (self.name)
您将能够以models.Post.tags的身份访问这些标签
这将是List
类型,其中包含models.Tag
类型的所有元素,因此可以轻松使用。