2016-05-13 127 views
1

在使用Flask/SQLalchemy構建的應用程序中實現WTForms SelectField時遇到了一些錯誤。SelectField WTforms無效選擇和sa_instance_state

下面是相關代碼:

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() 

Models.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)

然而,在添加要挾= 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__ 

我清楚這裏的東西或發送問題的話...我只是沒有足夠精明,挖進入表單返回並找出它。

+0

只是說明我已經嘗試了coerce = int並且得到了上面的屬性錯誤。任何幫助? – dizzy

回答

2

首先,您可以始終打印from.data以查看哪些數據正在返回評級。

現在關於你第二個錯誤_sa_instance_state。看起來它是由您的g.user造成的。如果此用戶已存在於數據庫中,則sqlalchemy將只設置外鍵。如果它是一個新/匿名用戶對象,它將嘗試保存用戶以及您的評論。

您是的用戶AnonymousUserMixin?如果是的話,你缺少db.Model在用戶的繼承?

+0

對不起,爲時已晚!你是對的。我得到錯誤的原因是因爲我沒有在我的實例中登錄的用戶,我沒有建立一個例外規則!啞我知道,但發佈這個幫助其他人如果他們忘記哈哈。 – dizzy

相關問題