2016-10-12 6 views
0

Я пытаюсь переключить from wtforms.ext.sqlalchemy.orm import model_form с помощью wtforms_alchemy ModelForm:не имеет атрибута validate_on_submit: Как использовать ModelForm wtforms-алхимии в колбу обработчика/зрения

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

Nevermind.

Хотя я попытался с помощью

from wtforms_alchemy import model_form_factory 

до этого поста, он решил работать, когда я положил его обратно, но после импорта ModelForm вместо перед ним.

Неважно.