【问题标题】:Multiple instances of the same form field同一表单域的多个实例
【发布时间】:2014-10-10 15:31:07
【问题描述】:

我有邀请表单,其中两个字段定义为人员和电子邮件,如下所示:

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)

其中 validate_form 函数是一个 cusotm 验证器,它检查几个邀请条件。

我的要求是允许用户一次邀请多个人。为了实现这一点,我添加了 jquery 函数,它以 html 形式复制这些字段并允许邀请多个人。

但问题出在我的视图函数中,当我从发布请求中提取结果时,它只提供第一人称信息。我怎样才能得到所有的人的详细信息。我的观点定义如下:

@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

这只会给出一个字段,而不是字段数组。

这可以用 python wtf 吗?怎么样?

【问题讨论】:

  • 嘿,你有没有机会添加你为我们这些人使用的 jquery,它可能会有所帮助?干杯!
  • 对不起,我在很久以前就开始做这个了,所以我没有代码,也不记得我们到底做了什么。我记得的是,它通过给它单独的 id 来动态添加新的文本字段,比如“id_1”、“id_2”等。

标签: python flask wtforms flask-wtforms


【解决方案1】:

您正在寻找的是 FormField,它可以让您构建 WTF 字段(甚至是组)的列表。

这是一个简单的示例——它将三个字符串字段呈现为 html 列表,因为这是最低要求。如果您想通过 javascript 添加额外内容,则只需遵循相同的命名方案,在下面的示例中,第四个的名称为 person-3

from flask import Flask, render_template_string
from flask.ext.wtf import Form
from wtforms import FieldList, StringField

app = Flask(__name__)
app.secret_key = 'TEST'


class TestForm(Form):
    person = FieldList(StringField('Person'), min_entries=3, max_entries=10)
    foo = StringField('Test')


@app.route('/', methods=['POST', 'GET'])
def example():
    form = TestForm()
    if form.validate_on_submit():
        print form.person.data
        ## [u'One', u'Two', u'Three']

    return render_template_string(
        """
            <form method="post" action="#">
            {{ form.hidden_tag() }}
            {{ form.person }}
            <input type="submit"/>
            </form>
        """, form=form)


if __name__ == '__main__':
    app.run(debug=True)

【讨论】:

  • @Doobeh - 当您说第 4 个人的名称为 person-3 时,该字段将如何在模板中呈现?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2011-11-28
  • 2018-12-04
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多