Wenn Sie dynamically add a field to a WTForms form eingeben, werden die neu hinzugefügten Felder nicht validiert (auch wenn Sie Validatoren hinzufügen).Das dynamische WTForm-Feld ist nicht validiert.
Zum Beispiel in Flask:
@app.route('/add', methods=['GET', 'POST'])
def add():
if 'state' not in session:
session['state'] = 1
form = MyForm()
if request.method == 'POST' and form.validate():
if session['state'] == 1:
setattr(
MyForm,
'asd',
StringField(
'asdfield',
validators = [
DataRequired(),
Length(min=1)
]
)
)
form = MyForm()
session['state'] = 2
return render_template(
'add.html',
form=form
)
print(len(form.asd.data)) # can equal 0
session['state'] = 1
return redirect('/add')
return render_template(
'add.html',
form=form
)
Ich glaube, dies auf die Tatsache zurückzuführen ist, dass form = MyForm()
jedes Mal, wenn Sie zu /add
gehen ausgeführt wird, so dass selbst wenn session['state'] == 2
Sie form.validate()
auf einem Standardformular ausgeführt, das nicht habe das dynamisch hinzugefügte Feld. Daher kann dieses Feld nicht Teil des Formularvalidierungsprozesses sein.
Wie kann man dieses Verhalten richtig angehen? Wenn es nicht möglich ist, wie kann man Felder zu einem bestehenden Formular so dynamisch hinzufügen, dass alle Felder bei der Übergabe ordnungsgemäß validiert werden?
ich, dass vorher tatsächlich getan habe und es hat funktioniert, aber ich habe vergessen, einen Teil des Codes in dem zeige Fehler wenn 'session ['state'] == 2' (was mich glauben macht, dass es keine Validierung gab). Ich sollte auch erwähnen, dass das dynamische Feld mit "Delattr" entfernt werden muss, sonst bleiben sie für immer. – Dreadlockyx