将关系相关的列添加到多对多表flask-sqlalchemy?

时间:2019-08-06 10:53:56

标签: python flask flask-sqlalchemy

我有以下型号:

class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tags = db.relationship('Tag', secondary=tags, lazy='subquery',
        backref=db.backref('pages', lazy=True))

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)

tags = db.Table('tags',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
    db.Column('page_id', db.Integer, db.ForeignKey('page.id'), primary_key=True)
    db.Column('language', db.String(50), nullable=False)
)

知道我是否要添加以下内容:

tag = Tag()
Page.tags.append(tag)

如何为新添加的标签设置language列的值。

1 个答案:

答案 0 :(得分:1)

是的,您可以通过创建PageTagModel模型来实现。

如下所示:

class PageTagModel(db.Model):
    __tablename__ = 'pagetags'

    page_id = db.Column(db.Integer, db.ForeignKey('pages.id'), primary_key=True)
    tag_id = db.Column(db.Integer, db.ForeignKey('tags.id'), primary_key=True)

    page = db.relationship('Page', backref=db.backref("pagetags"))
    tag = db.relationship('Tag', backref=db.backref("pagetags"))

    language = db.Column('language', db.String(50), nullable=False)

,然后将Page模型编辑为以下内容:

class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True) 

我假设您通过将Tagtags模型应用于__tablename__ = 'tags',向Page模型表提供了这个pages

全图:

class Page(db.Model):
    __tablename__ = 'pages'
    id = db.Column(db.Integer, primary_key=True)

class Tag(db.Model):
    __tablename__ = 'tags'
    id = db.Column(db.Integer, primary_key=True)

class PageTagModel(db.Model):
    __tablename__ = 'pagetags'

    page_id = db.Column(db.Integer, db.ForeignKey('pages.id'), primary_key=True)
    tag_id = db.Column(db.Integer, db.ForeignKey('tags.id'), primary_key=True)

    page = db.relationship('Page', backref=db.backref("tags_annotation"))
    tag = db.relationship('Tag', backref=db.backref("tags_annotation"))

    language = db.Column('language', db.String(50), nullable=False)

 # to use it
 tag = Tag()
 page = Page()
 page_tags = PageTagModel(page=page, tag=tag, language='English')

 db.session.add(tag)
 db.session.add(page)
 db.session.add(page_tags)
 db.session.commit()

如果您想直接从tags模型中获得Page,则必须将以下行添加到Page模型中

tags = db.relationship('Tag', secondary='pagetags', lazy='subquery', backref=db.backref('pages', lazy=True))