代码之家  ›  专栏  ›  技术社区  ›  spitfiredd

将表单中的多个标记添加到数据库的烧瓶

  •  1
  • spitfiredd  · 技术社区  · 7 年前

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

    我的模特看起来像:

    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'))
    )
    

    目前,我的视图逻辑设置为只添加posts,但我想添加功能,以便它也添加标记,如果我添加一个标记数据库insert,如下所示,

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

    0 回复  |  直到 7 年前