0

我正在制作一个类似应用程序的博客,我需要拥有可编辑标签的文章,并且删除标签也会反映文章中的变化。我正在使用 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)

但这使我认为我必须使用多对多关系。有人可以解释一下吗?谢谢!

4

1 回答 1

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,以便可以轻松使用。

于 2013-08-16T17:54:17.303 回答