我有一个选择字段,其中某些元素已褪色和禁用,我想用 WTForms 呈现这些元素:
<select name="cg" id="cat" class="search_category">
<option value='' >{% trans %}All{% endtrans %}</option>
<option value='' style='background-color:#dcdcc3' id='cat1' disabled="disabled">-- {% trans %}VEHICLES{% endtrans %} --</option>
<option value='2' {% if "2" == cg %} selected="selected" {% endif %} id='cat2' >{% trans %}Cars{% endtrans %}</option>
<option value='3' {% if "3" == cg %} selected="selected" {% endif %} id='cat3' >{% trans %}Motorcycles{% endtrans %}</option>
<option value='4' {% if "4" == cg %} selected="selected" {% endif %} id='cat4' >{% trans %}Accessories & Parts{% endtrans …Run Code Online (Sandbox Code Playgroud) 我有一个带有flask-wtf的表格用于上传一些图像,也可以是多个文件字段
我的表格:
class ComposeForm(Form):
attachment = FieldList(FileField(_('file')), _('attachment'))
add_upload = SubmitField(_('Add upload'))
Run Code Online (Sandbox Code Playgroud)
我的看法:
if form.validate_on_submit():
if form.add_upload.data:
form.attachment.append_entry()
return render_template('mailbox/compose.html', form=form)
else:
form.attachment.append_entry()
Run Code Online (Sandbox Code Playgroud)
我的模板:
<form method="POST" enctype="multipart/form-data" action=".">
{% for field in form %}
{{field}}
{% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)
当我enctype="multipart/form-data" 在表单append_entry中使用 不起作用时,只需再添加一个字段再点击add_upload但刷新后我只有一个字段(不是两个)
我怎么能解决这个问题?没有错误,我认为因为enctype wtform忘记了多少字段我必须添加更多:D
我正在使用 wtforms,我需要创建一个可以根据数据库中的信息生成表单定义的东西;动态表单创建。我逐渐意识到需要做什么,而我才刚刚开始。我可以创建表单并将它们与 wtforms/flask 一起使用,但是根据数据定义表单(从表单到表单略有不同)目前超出了我目前的技能水平。
有没有人做过这个并提供一些意见?有点模糊的问题,还没有实际的代码。我还没有找到任何例子,但也不是不可能做到。
mass of variable data to be used in a form --> wtforms ---> form on webpage
Run Code Online (Sandbox Code Playgroud)
编辑:
因此,“例如”我们可以使用调查。一个调查由几个 SQLAlcehmy 模型组成。调查是具有任意数量关联问题模型的模型(问题属于调查,例如多项选择问题,它变得复杂)。为了简化,让我们使用简单的 json/dict 伪代码:
{survey:"Number One",
questions:{
question:{type:truefalse, field:"Is this true or false"},
question:{type:truefalse, field:"Is this true or false"},
question:{type:text, field:"Place your X here"}
}
}
{survey:"Number Two",
questions:{
question:{type:text, field:"Answer the question"},
question:{type:truefalse, field:"Is this true or false"},
question:{type:text, field:"Place your email address here"}
}
}
Run Code Online (Sandbox Code Playgroud)
想象一下,而不是这个,数百个不同长度的 5+ 字段类型。如何使用 WTForms 为此管理表单,或者我什至需要使用 wtforms?我可以根据需要定义静态表单,但不能动态定义。
顺便说一句,我在 rails 中使用 simpleform …
我正在使用WTForms-JSON并处理嵌套表单。我想让内部表单可选,但如果存在内部表单,我希望它的字段是必需的。我遇到的问题是FormField不接受验证器。
(虽然我使用的是 WTForms-JSON,但我相信这也适用于 vanilla WTForms。)
这段代码有效,但不符合我想要的方式:
class InnerForm(Form):
foo_id = IntegerField("Foo ID", [Required()])
class OuterForm(Form):
inner = FormField(InnerForm)
Run Code Online (Sandbox Code Playgroud)
上面代码的问题inner是隐式需要。奇怪的是,虽然validate()回报率False时inner被省略了,errors是空的。
此代码不起作用:
class InnerForm(Form):
foo_id = IntegerField("Foo ID", [Required()])
class OuterForm(Form):
inner = FormField(InnerForm, "Inner", [Optional()])
Run Code Online (Sandbox Code Playgroud)
后者产生此错误:
TypeError: FormField does not accept any validators. Instead, define them on the enclosed form.
Run Code Online (Sandbox Code Playgroud)
我的问题是:我怎样才能使inner可选,但foo_id如果inner存在则需要?
Hy大家,我正在实现一个Flask/MongoDB项目,因为我是这个世界的新手,我已经按照本页的教程:http: //docs.mongodb.org/ecosystem/tutorial/write-a-tumblelog -application与-烧瓶-mongoengine /
之后,我开始编写自己的应用程序代码,这是代码的一部分:
楷模:
class Generic(db.Document):
descrizione = db.StringField(max_length=255, required=True)
meta = {
'allow_inheritance': True,
'indexes': [
{'fields': ['descrizione'], 'unique': True}
]
}
class Category(Generic):
def __call__(self, *args):
pass
class User(db.Document):
email = db.EmailField(max_length=255, required=True)
nickname = db.StringField(max_length=255, required=True)
password = db.StringField(max_length=16, required=True)
categoria = db.ReferenceField('Category', required=True)
meta = {
'indexes': [
{'fields': ['nickname', 'email'], 'unique': True}
]
}
Run Code Online (Sandbox Code Playgroud)
如上所示,我有一个继承"Generic"类的"Category"类."User"类最后有一个ReferenceField属于Category.这样,当我创建用户时,mongo db上的category字段存储为ObjectID,与"generic"集合相关,该集合具有我创建的所有类别.
下一步是创建表单以将新文档插入到用户集合中.在我的Views python文件中我有这个cose:
def iscrizione():
form = model_form(User, only=['email', 'nickname', 'password', 'categoria'])(request.form)
if request.method == 'GET': …Run Code Online (Sandbox Code Playgroud) 我知道我可以创建这样的动态字段:http : //wtforms.simplecodes.com/docs/1.0.1/specific_problems.html#dynamic-form-composition
但是上述解决方案对于我来说是笨拙的,并且需要一个我想避免的特殊API。我想知道是否有一种方法可以使它与多重继承一起工作?我尝试了以下操作,但它不起作用,我也不知道为什么,我认为WTForms应该根据类结构的工作方式正确地绑定表单:
>>> class Base(Form):
... def __init__(self, **kwargs):
... setattr(self, 'dynamic_boolean', fields.BooleanField('label'))
... super(Base, self).__init__(**kwargs)
...
>>> class Inherit(Base):
... other_boolean = fields.BooleanField('label')
...
>>>
>>> form = Inherit()
>>> form.__dict__
{'dynamic_boolean': <UnboundField(BooleanField, ('label',), {})>, 'other_boolean': <wtforms.fields.core.BooleanField object at 0x8a8510c>, '_fields': {'other_boolean': <wtforms.fields.core.BooleanField object at 0x8a8510c>}, '_prefix': '', '_errors': None}
Run Code Online (Sandbox Code Playgroud)
如您所见,dynamic_boolean是未绑定的。如何设置此值,以便正确绑定dynamic_boolean字段?
我正在编写一些基本测试并且测试失败。
def test_new_user_registration(self):
self.client.get('/user/register')
form = RegistrationForm(
email=u'crow@crow.com',
first_name=u'Alex',
last_name=u'Frazer',
username=u'crow',
password=u'fake_password',
confirm_password=u'fake_password'
)
self.assertTrue(form.validate())
Run Code Online (Sandbox Code Playgroud)
断言错误失败form.validate(),但如何查看验证错误是什么?
我有一个邀请表单,其中有两个字段定义为person和email,如下所示:
class InviteForm(Form):
person = TextField("person", validators=[validators.Required("Please enter persons name.")])
email = EmailField("email", validators=[validators.Required("Please enter valid email."), validators.Email("Please enter valid email.")])
def validate(self):
return validate_form(self)
Run Code Online (Sandbox Code Playgroud)
其中validate_form函数是一个cusotm验证器,它检查邀请的几个条件.
我的要求是允许用户一次邀请多个人.为了实现这一点,我添加了jquery函数,它以html格式复制这些字段,并允许邀请多个人.
但问题是在我的视图函数中,当我从post请求中提取结果时,它只给出了第一个人的信息.我怎样才能得到所有人的详细信息.我的观点定义如下:
@app.route("/invite", methods=["GET", "POST"])
def invite():
invite_form = InviteForm()
if invite_form.validate_on_submit():
print invite_form.person
print invite_form.email
Run Code Online (Sandbox Code Playgroud)
这只给出一个字段,而不是字段数组.
这可能与python wtf?怎么样?
我正在使用WTForms来显示和验证表单输入.我使用a DecimalField作为金额输入,当插入带点作为小数分隔符的值时,它可以正常工作.由于这个网站将在欧洲大陆使用,我也想让逗号作为小数分隔符.这意味着,这两个 "2.5"和"2,5"应导致的值,意思是"两半".
当我用逗号输入值时,我收到错误说'Not a valid decimal value'.如何使用WTForms接受点和逗号作为十进制分隔符?
我知道我可以使用Babel来使用基于区域设置的数字格式,但我不希望这样.我特别想接受点和逗号作为分隔符值.
我有使用PHP的经验,但我是Flask和Python的新手,我需要一些简单的帮助.
我有一个数据库表,我需要一个单选按钮中的每个条目.我需要使用WTForms,但我不能这样做.id应该是值,botname应该是标签.
这是我的表:
class Probot(db.Model):
__tablename__ = "probot"
id = db.Column(db.Integer, primary_key=True)
botname = db.Column(db.String(20), unique=True, index=True)
is_available = db.Column(db.Boolean, nullable=False, default=True)
battery = db.Column(db.Integer)
registered_on = db.Column(db.DateTime,default=datetime.datetime.utcnow())
Run Code Online (Sandbox Code Playgroud)
我使用查询:Probot.query.all()但是如何在表单上的RadiofField的选择属性中使用结果?
class SimpleForm(Form):
example = RadioField('Label', choices=[])
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法,但我总是会遇到错误,我会感激一些帮助.谢谢.
wtforms ×10
python ×9
flask ×4
forms ×3
jinja2 ×2
decimal ×1
sqlalchemy ×1
testing ×1
unit-testing ×1
wtforms-json ×1