Ich habe eine Pylons-App und verwende FormEncode und HtmlFill, um mit meinen Formularen umzugehen. Ich habe ein Array von Textfeldern in meiner Vorlage (Mako)Pylons FormEncode mit einem Array von Formularelementen
<tr> <td>Yardage</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> </tr>
Allerdings kann ich nicht scheinen, um herauszufinden, wie Sie diese Felder zu validieren. Hier ist der entsprechende Eintrag aus meinem Schema
yardage = formencode.ForEach(formencode.validators.Int())
Ich versuche, zu bestätigen, dass jedes dieser Felder ist ein Int. Für diese Felder wird jedoch keine Validierung durchgeführt.
UPDATE Wie hier angefordert ist der Code für die Aktion dieses Controllers. Ich weiß, dass es funktionierte, da ich andere Formularfelder validieren kann.
def submit(self): schema = CourseForm() try: c.form_result = schema.to_python(dict(request.params)) except formencode.Invalid, error: c.form_result = error.value c.form_errors = error.error_dict or {} c.heading = 'Add a course' html = render('/derived/course/add.html') return htmlfill.render( html, defaults = c.form_result, errors = c.form_errors ) else: h.redirect_to(controler='course', action='view')
UPDATE Es wurde im IRC vorgeschlagen, dass ich den Namen der Elemente yardage[]
-yardage
Kein Ergebnis ändern. Sie sollten alle ints sein, aber das Einfügen von f in eines der Elemente führt nicht dazu, dass es ungültig ist. Wie ich bereits sagte, kann ich andere Formularfelder validieren. Unten ist mein gesamtes Schema.
import formencode class CourseForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True name = formencode.validators.NotEmpty(messages={'empty': 'Name must not be empty'}) par = formencode.ForEach(formencode.validators.Int()) yardage = formencode.ForEach(formencode.validators.Int())
Können Sie noch mehr Code teilen, nicht zuletzt den Controller-Code? – ayaz