标签: wtforms

如何使用 WTForms 呈现我的选择字段?

我有一个选择字段,其中某些元素已褪色和禁用,我想用 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 &amp; Parts{% endtrans …
Run Code Online (Sandbox Code Playgroud)

python forms web-applications jinja2 wtforms

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

不能在Flask-wtf中多次追加_entry FieldList

我有一个带有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

python flask wtforms

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

可变长度元素的动态形式:wtforms

我正在使用 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 …

python forms wtforms

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

WTForms-JSON 与使用 FormField 的可选嵌套

我正在使用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()回报率Falseinner被省略了,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存在则需要?

wtforms wtforms-json

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

WTForms中的Mongoengine,Flask和ReferenceField

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)

python wtforms flask-mongoengine

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

Wtforms:添加具有多重继承的动态字段

我知道我可以创建这样的动态字段: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字段?

python forms wtforms

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

如何查看 WTForms 验证错误?

我正在编写一些基本测试并且测试失败。

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(),但如何查看验证错误是什么?

python testing unit-testing flask wtforms

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

同一表单字段的多个实例

我有一个邀请表单,其中有两个字段定义为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?怎么样?

python flask wtforms flask-wtforms

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

如何使用WTForms接受点和逗号作为小数分隔符?

我正在使用WTForms来显示和验证表单输入.我使用a DecimalField作为金额输入,当插入带点作为小数分隔符的值时,它可以正常工作.由于这个网站将在欧洲大陆使用,我想让逗号作为小数分隔符.这意味着,这两个 "2.5"和"2,5"应导致的值,意思是"两半".

当我用逗号输入值时,我收到错误说'Not a valid decimal value'.如何使用WTForms接受点和逗号作为十进制分隔符?


我知道我可以使用Babel来使用基于区域设置的数字格式,但我不希望这样.我特别想接受点和逗号作为分隔符值.

python decimal wtforms

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

使用Flask和WTForms从数据库查询的动态单选按钮

我有使用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)

我尝试了很多方法,但我总是会遇到错误,我会感激一些帮助.谢谢.

python sqlalchemy jinja2 flask wtforms

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