2017-01-02 4 views
0

Ich verwende den folgenden Code in einem Flask-Wtforms. Ich habe mit und ohne verschiedene Validatoren im SelectField versucht, aber beim ersten Mal gibt der Benutzer die Formularvalidierung zurück, gibt false zurück.Flask WTF Validierung False beim ersten Senden, True beim zweiten

Ich habe auch versucht, die zusätzliche Validierungsmethode zu entfernen, aber immer noch einen Validator in der SelectField und erneut Validierung gibt False beim ersten Senden zurück.

Im Wesentlichen möchte ich wissen, ob das SelectField nicht auf einen Wert von -1 gesetzt ist (dh wurde von der View-Methode gefüllt und vermutlich ist Benutzer mit dem gerade aktiven Element zufrieden). Ich bin nicht sicher, warum das Formular aus, wenn gültig auf dem zweiten einreichen, obwohl sonst nichts auf dem Formular

forms.py

something = SelectField(label = 'Something', choices = [('-1','Select Something')], default=('-1','Select Something'), id='select_something', validators=[validators.DataRequired(message='Nothing selected')]) 
#NB the line below with no validator also prints "--validate() returned false" 
#something = SelectField(label = 'Something', choices = [('-1','Select Something')], default=('-1','Select Something'), id='select_something') 
submit = SubmitField('Submit') 

def validate(self): 
    rv = Form.validate(self) 
    if not rv: 
     print("--validate() returned false") 
     return False 

    #the line below never fired, see fix in following line 
    #if self.something.data == -1: 
    if str(self.something.data) == '-1': 
     logger.debug("--validate() data==-1") 
     return False 
    return True 

view.py

form = Something(request.form) 
if request.method == 'GET': 
    #get tuple_list from database 
    ... 
    form.something.choices = tuple_list 
    form.something.default = tuple_list[0] 

if request.method == 'POST' and form.validate(): 
    print('Something added.') 
+1

Was 'tut form.errors' sagen? Hast du "form.csrf_token" in deine Vorlage eingefügt und den "SECRET" Schlüssel in deiner Konfiguration gesetzt? – MrLeeh

+0

@MrLeeh, danke, Fehler leer, crsf und scret_key sind OK. Ich habe ein paar Probleme gefunden - eines mit der Validierungsmethode - die Daten waren nie gleich -1. Auch das war ein Problem in der request.method == 'GET' Block, ich entfernte die while-Sache und arbeitet. –

Antwort

1

I String wurde mit ausgewählt wurde anstelle von Ganzzahlen für den ersten Teil jedes Auswahltupels (dh sollte (1, 'text') sein) und nicht korrekt voreinstellen (nur Standard = n setzen, wobei n = ganzzahlig ist).

Notiere die Form.Verfahren() -Aufruf wie hier: How do you set a default value for a WTForms SelectField?

unter Fixes:

views.py

form = Something(request.form) 
#get tuple_list from database 
... 
form.something.choices = tuple_list 
form.something.default = tuple_list[0][0] #integer id value 
form.process() 
if request.method == 'POST' and form.validate(): 
    return self.render_template('it_works.html') 
return self.render_template('select_something.html') 

forms.py

#no validator used here 
something = SelectField(label = 'Something', choices = [], id='select_something') 
submit = SubmitField('Submit') 

def validate(self): 
    if len(self.something.choices) == 0: 
     return False 
    return True 
+0

OMG. Das ist der wahre Lebensretter. Vielen Dank – Nabin

Verwandte Themen