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.')
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
@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. –