属性错误:“int”对象在烧瓶中没有属性“_sa_instance_state”

问题描述 投票:0回答:1

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

这是我的路线:

@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)
    parent = 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

python flask
1个回答
0
投票

创建新评论时,无需引用

book=book.id
,只需引用实际对象即可:

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

当您创建

book
backref SQLAlchemy 期望它是一个 SQLAlchemy 对象实例。由于您将
int
分配给
book
,ORM 会尝试像 SQLAlchemy 对象一样进行处理,因此会出现
'int' object has no attribute _sa_instance_state
(即 SQLAlchemy 尝试访问此属性)。

如果您想分配

int
值而不是对象,请将其分配给
parent
列:

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

另外,我建议您从

UserMixin
模型中删除 Flask-Login
Comments
。这可能是一个
ctrl+c/ctrl+v
错误。

© www.soinside.com 2019 - 2024. All rights reserved.