AttributeError: 'int' 对象在烧瓶中没有属性 '_sa_instance_state'

时间:2021-04-29 20:01:18

标签: python flask

我查看了其他一些类似的问题,但似乎并非如此,但我不确定。

这是我的路线:

@app.route('/status/<int:id>', methods=['GET', 'POST'])
@login_required
def status(id):
    form = CommentForm()
    
    book = Books.query.filter_by(id=id).first()
    
    if form.validate_on_submit:
        comment = Comments(comment_text=form.comment_text.data, book=book.id)
        db.session.add(comment)
        db.session.commit()
        
        return redirect(url_for("dashboard")) 
    
    bookview = Books.query.filter_by(id=id).first()
    
    return render_template('post.html', bookview=bookview, form=form) 

这是我的表格:

class Books(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author = db.Column(db.String)
    title = db.Column(db.String)
    description = db.Column(db.String)
    comments = db.relationship('Comments', backref='book')
class Comments(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    comment_text = db.Column(db.String)
    perent = db.Column(db.Integer, db.ForeignKey('books.id'))

这是我的 html

<form method="POST">
    {{ form.hidden_tag() }}
    {{ wtf.form_field(form.comment_text) }}
    

    <button type="submit">Comment</button>

</form>

我似乎无法弄清楚出了什么问题,我觉得它应该可以工作。

这是整个错误:

Here is the entire error

1 个答案:

答案 0 :(得分:0)

创建新评论时,不要引用 book=book.id,只需引用实际对象:

comment = Comments(comment_text=form.comment_text.data, book=book)

当您创建 book 反向引用时,SQLAlchemy 期望它是一个 SQLAlchemy 对象实例。由于您将 int 分配给 book,ORM 尝试像处理 SQLAlchemy 对象一样处理,因此 'int' object has no attribute _sa_instance_state(即 SQLAlchemy 试图访问此属性)。

如果要分配 int 值而不是对象,请将其分配给 perent 列:

comment = Comments(comment_text=form.comment_text.data, perent=book.id)

另外,我建议您从 UserMixin 模型中删除 Flask-Login Comments。这可能是一个 ctrl+c/ctrl+v 错误。