gpt4 book ai didi

python - SelectField WTforms 无效选择和 sa_instance_state

转载 作者:行者123 更新时间:2023-12-01 03:57:22 30 4
gpt4 key购买 nike

在使用 Flask/SQLalchemy 构建的应用程序中实现 WTForms SelectField 时,我遇到了许多错误。

相关代码如下:

Views.py:

form = ReviewForm()
if form.validate_on_submit():
review = Review(rating=form.rating.data, body=form.body.data, pub_date=datetime.utcnow(), author=g.user, item=thing)
db.session.add(review)
db.session.commit()

模型.py

RATING_CHOICES = (
(1, '1'),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
)

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
pub_date = db.Column(db.DateTime)
body = db.Column(db.Text)
rating = db.Column(db.Integer)

Forms.py

class ReviewForm(Form):
rating = SelectField('rating', choices=Review.RATING_CHOICES, validators=[Required()])
body = TextAreaField('body', validators=[Required()])
tags = StringField('tags', validators=[Required()])

所以现在,使用代码......我遇到了“不是有效的选择”问题。我假设它将我的评级解释为字符串或元组或其他内容,因此,它无法正确输入 rating=db.column(db.Integer)

但是,在将 coerce=int 添加到 selectfield 参数后,我开始遇到:

AttributeError: 'AnonymousUserMixin' object has no attribute '_sa_instance_state'

File "", line 194, in blank
review = Review(rating=form.rating.data, body=form.body.data, pub_date=datetime.utcnow(), author=g.user, item=thing)
File "<string>", line 4, in __init__

我显然在这里遗漏了一些东西或者发送了错误的东西...我只是不够精明,无法深入了解表单返回的内容并找出答案。

最佳答案

首先,您始终可以打印from.data来查看发送回哪些数据进行评级。

现在关于您的第二个错误_sa_instance_state。看起来这是由您的 g.user 引起的。如果该用户已存在于数据库中,sqlalchemy 将仅设置外键。如果它是新的/匿名用户对象,它将尝试将用户与您的评论一起保存。

您的用户类型是AnonymousUserMixin吗?如果是,您是否在用户继承中缺少db.Model

关于python - SelectField WTforms 无效选择和 sa_instance_state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37219908/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com