2016-05-13 4 views
1

Ich erhalte eine Reihe von Fehlern beim Implementieren eines WTForms SelectField in einer mit Flask/SQLalchemy erstellten Anwendung.SelectField WTforms nicht gültige Auswahl und sa_instance_state

Hier ist der entsprechende Code:

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

So jetzt, mit Code wie es ist ... Ich bekomme ein Problem "keine gültige Wahl". Ich gehe davon aus, dass es meine Bewertung als eine Zeichenfolge oder ein Tupel oder etwas interpretiert und daher rating=db.column(db.Integer) nicht richtig einspeist.

jedoch bei Zugabe coerce = int den SELECT Argumente, beginne ich zu stoßen:

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__ 

ich eindeutig etwas fehlt hier bin oder etwas falsch zu senden ... Ich bin genug einfach nicht kapieren zu graben in was die Form zurückkehrt und es herausfinden.

+0

Nur eine Notiz, die ich bereits versucht habe, coerce = int und habe den Attributfehler oben. Irgendeine Hilfe? – dizzy

Antwort

2

Als Erstes können Sie immer from.data drucken, um zu sehen, welche Daten zur Bewertung zurückgesendet werden.

Jetzt über Sie zweiten Fehler _sa_instance_state. Sieht aus, als ob es von Ihrem g.user verursacht wird. Wenn dieser Benutzer bereits in der Datenbank vorhanden ist, legt Sqlalchemy einfach den Fremdschlüssel fest. Wenn es sich um ein neues/anonymes Benutzerobjekt handelt, versucht es, den Benutzer zusammen mit Ihrer Überprüfung zu speichern.

Ist Ihr Benutzer vom Typ AnonymousUserMixin? Wenn ja, fehlt Ihnen db.Model in der Vererbung des Benutzers?

+0

Entschuldigung für die Antwort so spät! Du hast Recht. Der Grund dafür, dass ich den Fehler erhalten habe, war, dass ich kein angemeldeter Benutzer in meiner Instanz war und ich dafür keine Ausnahmeregel erstellt habe! Dumm ich weiß, aber posten, um jemand anderen zu helfen, wenn sie es vergessen haha. – dizzy