标签: flask-wtforms

Flask WTForms 总是在 validate_on_submit() 上给出 false

我已经使用 wtforms 创建了一个注册表单。我在其中使用 FormField 以便我不必再次重复表单的某些元素。但是每当我点击提交按钮时,它总是在 validate_on_submit 方法调用时给我错误。不明白为什么会这样。

form.py的如下:

class ProfileInfoForm(Form):
    firstname = TextField('firstname', validators=
                          [validators.Required("Please enter First name.")])
    lastname = TextField('lastname', validators=
                         [validators.Required("Please enter Last name.")])
    email = EmailField('email', validators=
                       [validators.Required("Please enter your valid email.")])
    gender = RadioField('gender', validators=
                        [validators.Required("Please select gender")],
                        choices=[('female', 'Female'), ('male', 'Male')])
    dob = TextField('dob', validators=
                    [validators.Required("Please select date of birth.")])
    languages = SelectMultipleField('languages', choices=[('', '')],
                                    validators=
                                    [validators.Required("Please select\
                                                         atleast one \
                                                         language.")])


class RegistrationForm(Form):
    profilefield = FormField(ProfileInfoForm)
    password = PasswordField('password',
                             validators=
                             [validators.Required("Please enter …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

3
推荐指数
1
解决办法
6524
查看次数

validate_on_submit始终使用Flask WTForms返回false

我有一个简单的无线电字段,它总是导致validate_on_submit返回false.当我打印form.errors时,看起来"无效的选择"作为无线电字段中的值传递,尽管coerce = int.

我不认为我正在破坏表格中返回的任何东西,我希望以正确的方式创造动态选择.我不明白为什么会失败.

以下是我的项目的相关部分 - 任何建议表示赞赏.

forms.py:

class SelectRecord(Form):
    rid = RadioField("Record Select", choices=[], coerce=int,validators=[InputRequired()])
Run Code Online (Sandbox Code Playgroud)

views.py:

@mod.route('/select/', methods=('GET', 'POST'))
@login_required
def select_view():
    form = SelectRecord(request.form)
    if form.validate_on_submit():
        rid = form.data.rid
        if form['btn'] == "checkout":
            # check out the requested record
            Records.checkoutRecord(rid)
            return render_template('/records/edit.html',rid=rid)
        elif form['btn'] == "checkin":
            Records.checkinRecord(rid)
            flash("Record checked in.")
    else:
        mychoices = []
        recs_co = session.query(Records.id).filter(Records.editing_uid == current_user.id).  \
            filter(Records.locked == True)
        for x in recs_co:
            mychoices.append((x.rid,"%s: %s (%s)" % (x.a, x.b, x.c, x.d)))
        x = getNextRecord() …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

3
推荐指数
1
解决办法
5910
查看次数

如何从模型生成的表单中指定所需的小部件(例如TextArea而不是简单的Text输入)?烧瓶SQLAlchemy WTForms

我使用了http://flask.pocoo.org/snippets/60/中的代码片段,通过Flask中的模型创建了WTForms表单。除了仅创建输入字段的事实以外,其他所有方法都工作正常。我希望说明(请参见下面的models.py)成为文本区域。有任何想法吗?

从models.py:

title = db.Column(db.String(55))
description = db.Column(db.Text)
Run Code Online (Sandbox Code Playgroud)

从views.py

MyForm = model_form(MyModel, base_class=Form)
form = MyForm()
return render_template('create.html', form=form)
Run Code Online (Sandbox Code Playgroud)

来自create.html

{% for field in form %}
    {{field.label}}
    {{field}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

输出:

<input id="title" name="title" type="text" value="">
<input id="description" name="description" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

我想要的是:

<input id="title" name="title" type="text" value="">
<textarea id="description" name="description"></textarea>
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

3
推荐指数
1
解决办法
2817
查看次数

根据单击的按钮验证 WTForm 表单

在我的表单上,我有两个按钮用于提交表单。一个按钮删除选定的文件(显示在表格中,一个复选框用于对象),另一个按钮选择它们进行处理。

当文件在删除时被选择时,不需要验证(除了检查是否至少选择了一个文件)。但是,为了进行处理,我需要确保只有一个具有特定扩展名的文件。基本上,我需要根据用户单击的按钮进行不同的验证过程。

我怎样才能最好地做到这一点?我知道我可以在视图中执行验证,但我更喜欢在表单内验证它,因为它更干净。

这是有问题的表格:

class ButtonWidget(object):
    """A widget to conveniently display buttons.
    """
    def __call__(self, field, **kwargs):
        if field.name is not None:
            kwargs.setdefault('name', field.name)
        if field.value is not None:
            kwargs.setdefault('value', field.value)
        kwargs.setdefault('type', "submit")
        return HTMLString('<button %s>%s</button>' % (
            html_params(**kwargs),
            escape(field._value())
            ))

class ButtonField(Field):
    """A field to conveniently use buttons in flask forms.
    """
    widget = ButtonWidget()

    def __init__(self, text=None, name=None, value=None, **kwargs):
        super(ButtonField, self).__init__(**kwargs)
        self.text = text
        self.value = value
        if name is not None:
            self.name = name

    def …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

3
推荐指数
1
解决办法
5159
查看次数

如何使用jQuery动态地将WTForms TextField添加到FieldList?

我想使用Jquery添加或删除带有按钮的新WTForm输入字段,就像这里 http://www.sanwebe.com/2013/03/addremove-input-fields-dynamically-with-jquery/comment-page-1 但是使用我的表格字段.

我的表格:

class EditBook(Form):
title = TextField('title', validators = [Required()])
authors = FieldList(TextField())
Run Code Online (Sandbox Code Playgroud)

问题是我不能只是附加例子

$(InputsWrapper).append("{{form.authors(size=20)}}");
Run Code Online (Sandbox Code Playgroud)

它只是打印这个文本.

python jquery wtforms flask-wtforms

3
推荐指数
1
解决办法
4926
查看次数

如何使用WTForms从模型列表创建表单?

我有一个Prediction模型列表.我想将它们绑定到表单并允许使用回发.我如何构建我的表单,以便帖子将Home/Away得分与我绑定到表单的每个项目的Prediction模型id字段相关联?

视图

@app.route('/predictor/',methods=['GET','POST'])
@login_required
def predictions():    
    user_id = g.user.id
    prediction= # retrieve prediction
    if request.method == 'POST':
        if form.validate() == False:
            flash('A score is missing, please fill in all predictions')
            render_template('predictor.html', prediction=prediction, form=form)
        else:
            for pred in prediction:
                # store my prediction
            flash('Prediction added')
            return redirect(url_for("predictions"))    
    # display current predictions
    elif request.method == 'GET':
        return render_template('predictor.html', prediction=prediction, form=form)
Run Code Online (Sandbox Code Playgroud)

形成

class PredictionForm(WTForm):
    id = fields.IntegerField(validators=[validators.required()], widget=HiddenInput())
    home_score = fields.TextField(validators=[validators.required()])
    away_score = fields.TextField(validators=[validators.required()])
Run Code Online (Sandbox Code Playgroud)

模板

  <form action="" …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask wtforms flask-wtforms

3
推荐指数
1
解决办法
2334
查看次数

使用 WTForms 在 TextAreaField 中动态填充默认值的 SelectField 选项

我有一个从数据库表填充的 SelectField。我将选项加载到表单中,如下所示:

@statuses.route('/new', methods=['GET', 'POST'])
@login_required
def new_status():
    form = StatusForm()
    form.status_cd.choices = [(a.id, a.status_cd) for a in \
                               Status_Code.query.order_by('status_cd')]
    if form.validate_on_submit():
        status = Status(author=current_user)
        form.to_model(status)
        db.session.add(status)
        db.session.commit()
        flash('The status was added successfully.')
        return redirect(url_for('.index'))
    return render_template('statuses/new_status.html', form=form)  
Run Code Online (Sandbox Code Playgroud)

查询中引用的模型如下:

class Status_Code(db.Model):
    __tablename__ = 'status_cd'
    id = db.Column(db.Integer, primary_key=True)
    status_cd = db.Column(db.String(16), nullable=False)
    status_detail = db.Column(db.Text)
    is_option_active = db.Boolean()
    date_created = db.Column(db.DateTime, default=db.func.now())
Run Code Online (Sandbox Code Playgroud)

表单类如下:

class StatusForm(Form):
    datetime = DateTimeField('Date / Time')
    name = StringField('Name', validators=[Required()])
    status_cd = SelectField('Status Code', coerce=int)
    status_detail …
Run Code Online (Sandbox Code Playgroud)

flask flask-wtforms

3
推荐指数
1
解决办法
6676
查看次数

需要flask-wtforms字段

我如何添加此烧瓶代码所需的标签:

{{ form.youtube_href(type='url', class='form-control') }}
Run Code Online (Sandbox Code Playgroud)

实际输出是:

<input class="form-control" id="youtube_href" name="youtube_href" value="" type="url">
Run Code Online (Sandbox Code Playgroud)

需要这个输出棒给出错误:

<input class="form-control" id="youtube_href" name="youtube_href" value="" type="url" required>
Run Code Online (Sandbox Code Playgroud)

我试过这个蝙蝠给出错误:

{{form.youtube_href(type ='url',class ='form-control','required')}}

python flask flask-wtforms

3
推荐指数
1
解决办法
6399
查看次数

flask-bootstrap在一个页面中有两个表单

我打算在我的烧瓶应用程序中将两个表单放在一个页面中,一个用于编辑一般用户信息,另一个用于重置密码.模板看起来像这样

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block page_content %}                                                   
<div class="page-header">                                                  
    <h1>Edit Profile</h1>
</div>

{{ wtf.quick_form(form_profile, form_type='horizontal') }}                 

<hr>

{{ wtf.quick_form(form_reset, form_type='horizontal') }}                   

<hr>
{% endblock %} 
Run Code Online (Sandbox Code Playgroud)

每个表单都有一个提交按钮.

在路由功能中,我试图将这两个表单分开

form_profile = ProfileForm()
form_reset = ResetForm()

if form_profile.validate_on_submit() and form_profile.submit.data:
    ....
if form_reset.validate_on_submit() and form_reset.submit.data:
    .....
Run Code Online (Sandbox Code Playgroud)

但它没有用.当我单击ResetForm中的按钮时,将执行ProfileForm验证逻辑.

我怀疑问题是wtf.quick_form()创建两个相同的提交按钮,但不确定.

在这种情况下我该怎么办?bootstrap/wtf.html模板可以处理这种情况吗?

python flask flask-wtforms flask-bootstrap

3
推荐指数
1
解决办法
1942
查看次数

ImportError:没有名为flask_wtf的模块

我正在获取ImportError:没有模块名为flask_wtf的错误,我尝试了每一个可能的解决方案。我使用flask / bin / pip安装flask- wrf 安装flask-wtf

已满足要求:.​​/ flask / lib / python2.7 / site-packages中的flask-wtf已满足要求:.​​/ flask / lib / python2.7 / site-packages中的WTForms。请帮我解决这个问题。

我正在共享显示错误的代码:

from flask_wtf import Form 
from wtforms import StringField, BooleanField
from wtforms.validators import DataRequired

class LoginForm(Form):
    openid = StringField('openid', validators=[DataRequired()])
    remember_me = BooleanField('remember_me', default=False)***
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 flask-wtforms

3
推荐指数
2
解决办法
1万
查看次数