Kolben + WTForms + SelectMultipleField und Dynamische Entscheidungen
Ich versuche, mit WTForms.SelectMultipleField verwalten einige dynamische Entscheidungen, die auf einem Formular, aber ich bin in einige Schwierigkeiten damit, die geändert wird, auf client-Seite, bevor Sie zur Validierung übermittelt.
Im Grunde habe ich zwei SelectMultipleField Optionen:
class MyForm(Form):
assigned = SelectMultipleField('Assigned', choices=[])
available = SelectMultipleField('Available', choices=[('1','1'),('2','2')])
Ich bin mit der Flasche zu erbringen Jinja2-templates so:
@app.view("/myview", methods=['GET','POST'])
def myview():
form = MyForm(request.form)
if request.method == 'POST' and form.validate():
return render_template("success.html")
else:
return render_template("index.html", form=form)
In meiner Vorlage habe ich dieses:
<script type="text/javascript">
function assign_object() {
return !$('#available option:selected').remove().appendTo('#assigned');
};
function unassign_object() {
return !$('#assigned option:selected').remove().appendTo('#available');
}
$(document).ready( function() {
$('#available').dblclick( assign_object );
$('#assigned').dblclick( unassign_object );
});
</script>
<form action="/myview" method="post" name="assign_objects">
{{ render_field(form.a) }}
{{ render_field(form.b) }}
<input type="submit" value="Assign" name="assign_button"/>
</form>
Im Grunde das ganze funktioniert wie vorgesehen; ein Doppelklick auf einen Eintrag in die unassigned Liste verschiebt es in der Liste zugewiesen. Das Problem ist, wenn das Formular abgeschickt wird, für die Validierung, da die .Auswahl-Attribut auf die "zugeordneten" Bereich war ursprünglich "[ ]" und ist immer noch erwartet, dass "[ ]" anstatt der neuen Liste der Optionen, die wir haben gegeben es.
Kennt jemand einen guten Weg, dies zu tun? Ich dachte, ich könnte das überschreiben der Formen pre_validate () - Funktion und update zugewiesen.Entscheidungen, die alle Werte aus der "verfügbar" - Liste, aber das fühlt sich nicht "richtig" ist und verwendet werden könnte, zu unterbreiten, zufällige Werte aus der client-Seite auf "Absenden".
Cheers,
David.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update
choices
imPOST
Anfrage:form.validate()
aus einem bestimmten Grund fehlgeschlagen. Cheers Sean für den Beistand.