2016-10-12 22 views
0

我試圖切換from wtforms.ext.sqlalchemy.orm import model_form使用wtforms_alchemy的ModelForm:有沒有屬性validate_on_submit:如何使用wtforms,鍊金術的的ModelForm燒瓶處理器/視圖

from wtforms_alchemy import ModelForm 

我失敗的很慘......我已經不成功尋找一個使用wtforms_alchemy的工作示例,它顯示了處理程序和模型。

使用model_form工作對我來說:這是一個使用模型的形式我的工作代碼:

模型腳本(蟒蛇):

from app import db 

class Test(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    test1 = db.Column(db.String()) 
    test2 = db.Column(db.String()) 

處理程序腳本(蟒蛇,燒瓶,model_form):

from flask.ext.wtf import Form 
from wtforms.ext.sqlalchemy.orm import model_form 
from wtforms import validators 

from app import app 
from app import db 

from app.models import * 

@app.route('/', methods=['GET', 'POST']) 
@login_required 
def index(): 
    TestForm = model_form(Test, base_class = Form, db_session=db.session, field_args = { 
     'test1' : { 
      'validators' : [validators.Length(max=1)] 
     } 
    }) 
    form = TestForm() 

    if form.validate_on_submit(): 
     flash("success") 
     new_test = Test() 
     form.populate_obj(new_test) 
     db.session.add(new_test) 
     db.session.commit()   
     return redirect(url_for("index")) 
    return render_template("main.html", form=form) 

模板(使用鯖):

<form class="form" action="/" method="POST"> 
    % for f in form: 
     %if f.widget.input_type != 'hidden': 
      <dt>${ f.label }</dt> 
     % endif 

     <dd> 
     ${f} 
     % if f.errors: 
      <div class="flashes alert alert-danger"> 
       <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a> 

       % for e in f.errors: 
        <p>${e}</p> 
       % endfor 
      </div> 
     % endif 
     </dd> 
    % endfor 
    <input type="submit" value="go"> 
</form> 

當我嘗試過改變我的處理程序腳本頁使用的ModelForm與此代碼(見下文),我收到了「TESTFORM」對象有沒有屬性「validate_on_submit」錯誤

處理程序腳本(蟒蛇,瓶,的ModelForm):

from flask.ext.wtf import Form 
from wtforms_alchemy import ModelForm 
from wtforms import validators 

from app import app 
from app import db 

from app.models import * 

class TestForm(ModelForm): 
    class Meta: 
     model = Test 

@app.route('/', methods=['GET', 'POST']) 
@login_required 
def index(): 
    form = TestForm() 

    if form.validate_on_submit(): 
     flash("success") 
     new_test = Test() 
     form.populate_obj(new_test) 
     db.session.add(new_test) 
     db.session.commit()   
     return redirect(url_for("index")) 
    return render_template("main.html", form=form) 

我缺少什麼?

回答

0

沒關係。

雖然我一直在使用

from wtforms_alchemy import model_form_factory 

這個帖子之前試過了,決定在工作的時候把它放回去,但進口的ModelForm之後,而不是之前。

無論如何。