在提交时没有validate_属性:如何在Flask处理程序/vi中使用wtformsalchemy的ModelForm

2024-06-17 10:51:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将from wtforms.ext.sqlalchemy.orm import model_form切换为使用wtforms\u alchemy ModelForm:

from wtforms_alchemy import ModelForm 

我失败得很惨。。。我一直在寻找一个使用wtforms_alchemy的工作示例,它同时显示了处理程序和模型。在

使用model_form对我很有用:下面是我使用model forms的工作代码:

模型脚本(python):

^{pr2}$

处理程序脚本(python、flask、model\u 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)

模板(使用mako):

<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”错误

处理程序脚本(python、flask、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)

我错过了什么?在


Tags: fromtestimportformappnewdbmodel
1条回答
网友
1楼 · 发布于 2024-06-17 10:51:20

别担心。在

虽然我试过用

from wtforms_alchemy import model_form_factory

在这篇文章之前,当我把它放回去时,它决定工作,但是在ModelForm导入之后,而不是在它之前。在

不管怎样。在

相关问题 更多 >