Yes, you can achieve that by creating PageTagModel model.
like the following:
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)
And please edit the Page model to the following:
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
I assume you gave the Tag model table this tags by using __tablename__ = 'tags' and Page model to pages.
Full picture:
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()
if you want to get tags directly from the Page model then you must add the following line to the Page model
tags = db.relationship('Tag', secondary='pagetags', lazy='subquery', backref=db.backref('pages', lazy=True))