我查看了其他一些类似的问题,但似乎并非如此,但我不确定。
这是我的路线:
@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>
我似乎无法弄清楚出了什么问题,我觉得它应该可以工作。
这是整个错误:
答案 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
错误。