SelectField WTforms无效的选择和sa_instance_state



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

这是相关代码:

视图.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)

然而,在selectfield参数中添加coffel=int后,我开始遇到:

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__

我显然在这里遗漏了什么或发错了什么。。。我只是不够精明,无法深入了解回归的状态并弄清楚。

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

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

您的用户类型是否为匿名用户Mixin?如果是,是否在用户的继承中缺少db.Model

最新更新