簡體   English   中英

沒有屬性 validate_on_submit:如何在燒瓶處理程序/視圖中使用 wtforms-alchemy 的 ModelForm

[英]has no attribute validate_on_submit: How to use wtforms-alchemy's ModelForm in a flask handler / view

我正在嘗試from wtforms.ext.sqlalchemy.orm import model_form切換到使用 wtforms_alchemy ModelForm:

from wtforms_alchemy import ModelForm 

我失敗得很慘……而且我一直沒有成功尋找一個使用 wtforms_alchemy 的工作示例,該示例同時顯示了處理程序和模型。

使用 model_form 對我有用:這是我使用模型表單的工作代碼:

模型腳本(python):

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())

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

模板(使用 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)

我錯過了什么?

沒關系。

雖然我嘗試過使用

from wtforms_alchemy import model_form_factory

在這篇文章之前,當我把它放回去時,它決定工作,但是在 ModelForm 導入之后而不是在它之前。

任何。

change import --> " from wtforms_sqlalchemy.orm import model_form " change import --> " from flask_wtf import FlaskForm " 將基類從 'Form' 更改為 'FlaskForm'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM