2013-01-21 8 views
5

Ich habe eine wtforms FormWie kann ich die WTforms SelectField Auswahlvalidierung deaktivieren?

class MyForm(Form): 
    names = SelectField('name', choices=[]) 

Die Auswahl der Namen Feld dynamisch erstellt wird und in der Vorlage durch einen Ajax-Aufruf generiert. Wenn ich das Formular abschicke, löst es eine Ausnahme "keine gültige Wahl" aus. Ich möchte nicht, dass das Formular die Auswahl der Namen für mich bestätigt. Wie kann ich die Validierung deaktivieren?

+0

Warum fügen Sie einen Auswahlparameter hinzu? Warum nicht 'name = SelectField ('name')'? –

Antwort

1

Von "Ich möchte nicht, dass das Formular die Auswahl validiert", nehme ich an, Sie tatsächlich bedeuten "Ich werde es später selbst tun und bezweifle die Fähigkeit der Form, es richtig zu tun".

Aber Sie haben Glück! Sie können ein vorhandenes Formular ableiten, um Auswahlen dynamisch hinzuzufügen.

class MyForm(Form): 
    # other fields... 


def some_handler(request): 
    name_choices = build_name_choices() 
    class RealForm(MyForm): 
     names = SelectField('name', choices=name_choices) 

    form = RealForm(request.GET) 
    form.validate() 

Dies erspart Ihnen auch von der Langwierigkeit der Verschmelzung der Validierung und Fehlermeldungen des Formulars mit denen man sich später zu generieren.

+2

Sie haben gerade die Frage des Autors durch Ihre eigene ersetzt und beantwortet. Ich habe auch dieses Bedürfnis und es ist immer noch die falsche Annahme. Ich brauche offene Auswahlmöglichkeiten, die dynamisch auf dem Client hinzugefügt werden und somit auf dem Server unbekannt sind. – Xealot

8

Ich habe so etwas getan, um die SelectMultipleField Validierung in WTForms zu schreiten. Es sollte mit einem einfachen SelectField

class NonValidatingSelectMultipleField(SelectMultipleField): 
    """ 
    Attempt to make an open ended select multiple field that can accept dynamic 
    choices added by the browser. 
    """ 
    def pre_validate(self, form): 
     pass 

die gleiche Weise habe ich einfach die integrierte Validierungs außer Kraft setzen.

+0

Das ist genau richtig. Falls jemand interessiert ist, hier ist der pre_validate Code, den du überspringst: –

+0

Das war für das normale SelectField. Hier ist für SelectMultipleField: def pre_validate (selbst, Formular): wenn self.data: Werte = Liste (c [0] für c in self.choices) für d in selbst.data: wenn d nicht in Werte: raise ValueError (self.gettext ("'% (Wert) s' ist keine gültige Wahl für dieses Feld")% dict (value = d)) –

Verwandte Themen