嗨,我有一个表格类,如下所示: -
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不是检查文件名是否存在的正确方法
是否有基于WTForms的Flask的通用CRUD管理员?
目前我们正在构建一个混合后端系统,其中管理员必须CRUD来自各种来源,MongoDB,Redis,ini文件,ENVIRON等的大量数据.为每个数据写入特定的管理视图似乎是浪费时间,但所有Flask管理员或WTForms管理解决方案基于某种固定的ORM,例如MongoEngine,AppEngine Datastore,SQLAchemy等.
是否有更多通用的,允许自动生成ORM无关的管理员?
我需要它来提供以下功能
只需定义一些Form模型,实现迭代方法并自动生成完整的管理员.
是否有像这样的可重复使用的OSS项目?
我有一个形式wtform,我想一个新的窗体添加JobItemForm我的形式来JobForm使用append_entry.JobItemForm已selectField命名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) 我现在用的烧瓶mongoengine和我的模型Post有田title,slug,body和tags.每个Post都有一个独特的slug,每个Post需要至少有1个标签.所以tags是一种list的strings具有至少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 …
尝试填充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) 我有一个包含价格十进制字段的表单,如下所示:
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).
这是我的代码:
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.我怀疑我误解了胁迫是如何起作用的.
我有一个多部分表单来生成 - 想一下类似的工作流程到购物车,你有一个表格的多个"部分"(例如细节,账单,支付等),一次显示一个.
关键细节:
我考虑接近这个的方式:
def并存储一个值request.args告诉我我在哪个"部分"然后render_template根据部分使用不同的Form模板.这感觉很糟糕......在Flask/WTForms中实现这一目标的最佳方法是什么?我上面发布的方法似乎都没有,我毫不怀疑这是一个相当普遍的要求.
我正在尝试使用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) 我想在表单中使用电话号码字段.我需要的是在Android手机上点击此字段,而不是普通键盘,但仅显示数字.
我了解到这可以通过使用<input type="tel"或实现<input type="number".
如何在WTForms中使用tel或number输入类型?