添加带标签的帖子的数据库逻辑是什么?当前关系具有多对多关联表,但我不确定如何创建将标记添加到数据库的逻辑。
我的模特看起来像:
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.Text(), nullable=False)
created_on = db.Column(db.DateTime(timezone=True), server_default=func.now())
updated_on = db.Column(db.DateTime(timezone=True), onupdate=func.now())
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<{} {}>'.format(self.id, self.title[:20])
class Tag(db.Model):
__tablename__ = 'tags'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
slug = db.Column(db.String(255), nullable=False)
created_on = db.Column(db.DateTime(), server_default=func.now())
def __repr__(self):
return "<{}:{}>".format(self.id, self.name)
post_tags = db.Table('post_tags',
db.Column('post_id', db.Integer, db.ForeignKey('posts.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('tags.id'))
)
目前,我的视图逻辑设置为仅添加帖子,但我想添加功能以便添加标签,如果我添加标签数据库插入如下,
if form.validate_on_submit():
body = form.body.data
tags = form.tags.data
post = Post(body=body, user_id=current_user.id)
db.session.add(post)
db.session.commit()
if tags:
new_tag = Tag(name=tags, slug=tags)
db.session.add(new_tag)
db.session.commit()
当我测试它时,上面的逻辑似乎将标签和post数据库插入视为它们是单独的实体。
另外,如何处理向数据库添加多个标签?例如,如果我有一个表单并且标签都以逗号分隔,我该如何添加每个标签?