标签: wtforms

WTforms:错误"字段不存在"

嗨,我有一个表格类,如下所示: -

class UserCreateForm(wtf.Form):
    name=wtf.TextField('Name',validators=[validators.Required(),username_check])
    email=wtf.TextField('Email')
    userimage=wtf.FileField(u'Upload Image',validators=[checkfile])
Run Code Online (Sandbox Code Playgroud)

自定义验证器函数"checkfile"如下所示: -

def checkfile(form,field):
   if field.data:
      filename=field.data.lower()
      ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
      if not ('.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS):
            raise ValidationError('Wrong Filetype, you can upload only png,jpg,jpeg,gif files')
  else:
      raise ValidationError('field not Present') # I added this justfor some debugging.
Run Code Online (Sandbox Code Playgroud)

但是我发现即使我在模板中浏览文件并单击"提交",它也总是会引发错误"字段不存在".我在这里有点困惑.field.data不是检查文件名是否存在的正确方法

python forms flask wtforms flask-wtforms

5
推荐指数
1
解决办法
2754
查看次数

使用WTForms的Flask的通用CRUD管理员?

是否有基于WTForms的Flask的通用CRUD管理员?

目前我们正在构建一个混合后端系统,其中管理员必须CRUD来自各种来源,MongoDB,Redis,ini文件,ENVIRON等的大量数据.为每个数据写入特定的管理视图似乎是浪费时间,但所有Flask管理员或WTForms管理解决方案基于某种固定的ORM,例如MongoEngine,AppEngine Datastore,SQLAchemy等.

是否有更多通用的,允许自动生成ORM无关的管理员?

我需要它来提供以下功能

  • 列表视图的一组项目,支持内联编辑或批量操作将是伟大的!
  • 编辑一个特定项目的视图以进行添加/编辑

只需定义一些Form模型,实现迭代方法并自动生成完整的管理员.

是否有像这样的可重复使用的OSS项目?

python admin web-frameworks flask wtforms

5
推荐指数
2
解决办法
6326
查看次数

如何使用默认的初始数据附加新的wtforms FormField?

我有一个形式wtform,我想一个新的窗体添加JobItemForm我的形式来JobForm使用append_entry.JobItemFormselectField命名company.我通过这样的模型添加选择字段数据

form.jobs[0].company.choices = company_list
Run Code Online (Sandbox Code Playgroud)

现在我使用append_entry没有任何选择,我收到一个错误.那么如何调用append_entry一些初始数据呢?

class JobItemForm(Form):
    company = SelectField(_('company'), description=_('<a href="/education/institute/add/">new company"</a>'))
    title = TextField(_('title'), [validators.Length(min=4, max=250)])
    date_from = DateField(_("date_from"), format='%Y-%m-%d')
    date_to = DateField(_("date_to"), format='%Y-%m-%d')
    description = TextAreaField(_('description'))


class JobForm(Form):
    jobs = FieldList(FormField(JobItemForm), min_entries=3)
    add_job = SubmitField(_('Add job'))
Run Code Online (Sandbox Code Playgroud)

这样的事情

@mod.route('/edit/', methods=['GET', 'POST'])
@login_required
def edit_job():
    """
    edit job
    """
    company_list = Company.Company_list()
    form_title = "Edit job Form"
    if request.method != 'POST': …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms

5
推荐指数
1
解决办法
6781
查看次数

使用ListField定义一个不能为空的mongoengine模型

我现在用的烧瓶mongoengine和我的模型Post有田title,slug,bodytags.每个Post都有一个独特的slug,每个Post需要至少有1个标签.所以tags是一种liststrings具有至少1个元素.

class Post(db.Document):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    title = db.StringField(max_length=255, required=True)
    slug = db.StringField(max_length=255, required=True, unique=True)
    body = db.StringField(required=True)
    tags = db.ListField(db.StringField(max_length=255), required=True)   #each post should have at least one tag

    def get_absolute_url(self):
        return url_for('post', kwargs={"slug": self.slug})

    def __unicode__(self):
        return self.title

    meta = {
        'allow_inheritance': False,
        'indexes': ['-created_at', 'slug', 'title', 'tags'],
        'ordering': ['-created_at'],
        'collection': 'posts',
    }
Run Code Online (Sandbox Code Playgroud)

当我在模板中创建一个用于输入新帖子的表单时,每个标签都会输入一个带有名称的新文本框中,tags …

python mongoengine flask wtforms

5
推荐指数
1
解决办法
1906
查看次数

Wtforms表单,用于访问嵌入式Formfield的语法

尝试填充Wtform表单字段,并使用数据拔出mongo db数据库,然后将其提供给jinja / flask来为我正在构建的REST系统创建可编辑的预填充表单。

我的表格结构:

class ProjectForm(Form):
    name = TextField("Name of Project")     
    workflow =FieldList(TextField(""), min_entries=5)

class InstituteForm(Form):
    institue_name = TextField("Name of Institue")
    email = FieldList(TextField(""), min_entries=3)
    project_name = FormField(ProjectForm)
    submit = SubmitField("Send")`
Run Code Online (Sandbox Code Playgroud)

我可以使用以下语法预填充字段列表:

form = InstituteForm(institue_name="cambridge",
                     email=["email@gmail", "email@gmail"])
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚预填充FormField包含表单对象的的语法。

首先,我创建一个项目表单:

p = ProjectForm(name=" test", workflow=["adadadad", "adasdasd", "adasdadas"])
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试将其添加到InstituteForm表单中。

我试过了:

form = InstituteForm(institue_name=store_i,
                     project_name=p,
                     email=store_email)
Run Code Online (Sandbox Code Playgroud)

对于我得到的HTML输出:

上载示例输出[ http://tinypic.com/r/jpfz9l/5],没有足够的点数来发布图像以使堆栈溢出。

而且我尝试过类似的语法:

form = InstituteForm(institue_name=store_i,
                     project_name.name=p,
                     email=store_email)
Run Code Online (Sandbox Code Playgroud)

form = InstituteForm(institue_name=store_i,
                     project_name=p.name,
                     email=store_email)
Run Code Online (Sandbox Code Playgroud)

乃至

form = InstituteForm(institue_name=store_i, …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms

5
推荐指数
1
解决办法
1605
查看次数

WTForms中的十进制字段舍入

我有一个包含价格十进制字段的表单,如下所示:

from flask.ext.wtf import Form
import wtforms
from wtforms.validators import DataRequired
from decimal import ROUND_HALF_UP

class AddListingBase(Form):
    title = wtforms.StringField(validators=[DataRequired()])
    details = wtforms.TextAreaField(validators=[DataRequired()])
    price = wtforms.DecimalField(places=2, rounding=ROUND_HALF_UP, validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

当我提交表单时,小数值被赋予舍入到2位小数,但这种情况从未发生过.我总是得到指定的值(例如99.853是99.853,而不是应该是99.85).

python wtforms flask-wtforms

5
推荐指数
1
解决办法
2276
查看次数

WTForms SelectField没有正确地强制执行布尔值

这是我的代码:

class ChangeOfficialForm(Form):
    is_official = SelectField(
        'Officially Approved',
        choices=[(True, 'Yes'), (False, 'No')],
        validators=[DataRequired()],
        coerce=bool
    )
    submit = SubmitField('Update status')
Run Code Online (Sandbox Code Playgroud)

出于某种原因,is_official.data总是如此True.我怀疑我误解了胁迫是如何起作用的.

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
1521
查看次数

使用Flask/WTForms的多部分表单

我有一个多部分表单来生成 - 想一下类似的工作流程到购物车,你有一个表格的多个"部分"(例如细节,账单,支付等),一次显示一个.

关键细节:

  • 我有3个部分的表格
  • 这些部分必须按顺序完成,第2部分依赖第1部分的信息
  • 表单数据是无用的(例如将被丢弃),除非该人完成了FULL过程(第1,2和3节).

我考虑接近这个的方式:

  • 使用一个Route def并存储一个值request.args告诉我我在哪个"部分"然后render_template根据部分使用不同的Form模板.这感觉很糟糕......
  • 为每个部分设置不同的路径和视图.这感觉不对,我不得不阻止人们通过URL直接进入第2步
  • 将所有Sections放在一个表单上,使用Javascript隐藏一个表单的某些部分并在这些部分之间移动

在Flask/WTForms中实现这一目标的最佳方法是什么?我上面发布的方法似乎都没有,我毫不怀疑这是一个相当普遍的要求.

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
1918
查看次数

Bootstrap和水平单选按钮

我正在尝试使用Bootstrap-CSS和水平显示单选按钮Flask-WTForms.据我所知,我需要使用Bootstrap类class_="radio-inline"来实现这一目标.我试过了,我得到的就是这个:

在此输入图像描述

其中,单选按钮是垂直组织的,令人沮丧.

Flask WTForm代码:

from flask.ext.wtf import Form
import csv
import os
import buildHome as bh
from wtforms import TextField, RadioField, TextAreaField, SubmitField, validators, BooleanField

class ContactForm(Form):

    firstName = TextField("First name",  [validators.Required("Please enter your first name.")])
    lastName = TextField("Last name",  [validators.Required("Please enter your last name.")])
    #name = TextField("Name",  [validators.Required("Please enter your name.")])
    email = TextField("Email",  [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])

    node_1 = BooleanField("Joan Johnson (Buckridge Inc)")
    direction_1 = RadioField('', …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-wtforms twitter-bootstrap-3

5
推荐指数
1
解决办法
3949
查看次数

如何在WTForms中使用"tel","number"或其他输入类型?

我想在表单中使用电话号码字段.我需要的是在Android手机上点击此字段,而不是普通键盘,但仅显示数字.

我了解到这可以通过使用<input type="tel"或实现<input type="number".

如何在WTForms中使用tel或number输入类型?

python flask wtforms flask-wtforms

5
推荐指数
1
解决办法
3324
查看次数