2015-10-13 175 views
1

我在表單中發送數據時遇到問題,但情況並非如此。在我看來,我構建了一個動態形式的協議,在代碼中有一些更復雜的模型要簡單得多,但這個想法是一樣的。 當我完成表單時,這是從不處理的。我真的不知道可能是什麼問題。驗證表格中動態構建的表格

代碼:

from wtforms import StringField,SubmitField 
from flask.ext.wtf import Form 

@preguntas.route('/pregunta/encuesta/', methods=['GET','POST']) 
def view(): 
    class F(Form): 
     pass 

    #building form 
    setattr(F,'funcion1', StringField(label='fun1')) 
    setattr(F,'funcion2', StringField(label='fun2')) 
    setattr(F,'enviar', SubmitField('enviar formulario')) 

    formulario = F() 

    if formulario.validate_on_submit(): 
     #never comes to this part of the code 
     print "saving data..." 


    return render_template('pregunta/page.html',form = formulario) 

謝謝您的回答

回答

0

我認爲有需要檢查的幾件事情。你試圖驗證的形式是什麼?在你的代碼示例中,我沒有看到使用驗證器。例如,

setattr(F,'funcion1', StringField(label='fun1', [validators.Length(max=10)])) 

這應該添加一個驗證器驗證已輸入不超過10個字符。你可以在驗證器列表中添加你想要的驗證器

另外,如果你正在使用CSRF保護和POST,你應該包括{{hidden_​​tag}} or {{formulario.csrf_token}}`作爲第一個元素表單 你的模板裏面形式應該是這樣的:

<form action="{{url_for('some_view'}}"> 
{{hidden_tag}} 
<!-- rest of form elements --> 
</form> 

並嘗試看你從你的形式得到什麼錯誤BU這樣做:

formulario = F() 
print formulario.errors 
if formulario.validate_on_submit(): 
    # some code 
+0

我指的是申請表的處理,而不是對字段的驗證電子表格。謝謝回覆。 –

+0

嘗試在驗證之前打印form.errors,並查看您得到的錯誤。我懷疑你沒有使用CSRF令牌,導致'validate_on_submit()'返回false。 'print form.errors'應該驗證。如果是這種情況,那麼在模板的表單頂部, 添加'{{formulario.csrf_token}}' – shifloni

+0

只是爲了更正我的評論,而不是'print form.errors'使用'print formulario.errors' – shifloni