首页 > 解决方案 > Flask将多个标签从表单添加到数据库

问题描述

添加带有标签的帖子的数据库逻辑是什么?当前关系有一个多对多关联表,但我不确定如何创建将标签添加到数据库的逻辑。

我的模型看起来像:

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 数据库插入视为单独的实体。

另外,如何处理向数据库添加的多个标签?例如,如果我有一个表单并且标签都是逗号分隔的,我该如何添加每个标签?

标签: pythonflask

解决方案


推荐阅读