【问题标题】:Getting data iterating over wtform fields获取遍历 wtform 字段的数据
【发布时间】:2014-05-30 19:58:41
【问题描述】:

我有一个表单,以及动态添加字段的数量,

class EditBook(Form):
    title = TextField('title', validators = [Required()])
    authors = FieldList(TextField())

这就是我添加它们的方式

$('form').append('<input type="text" class="span4" id="authors-' + FieldCount +'" name="authors-' + FieldCount +'" placeholder="author ' + FieldCount +'">');

我想从这些输入中获取数据。如何使用 python 遍历它们?

(或者如何使用 jquery 将收集的数据发送到服务器?我是 js 和 jquery 的新手)

猜我的输入与作者字段列表无关。

更新

我的输入没有与 EditBook 连接,尽管我将它们附加到它。

当我将输入附加到表单时,form.data 将解决其余问题。 (现在我只是得到 keyerror,试图访问 form.data['authors-1'])

现在我尝试只添加一个作者字段以供以后复制。 但由于未知原因,它变得不可见。 在空白处应输入,类似于“author-1”

{{form.authors(class="span4", placeholder="author 1")}}

我应该在代码中添加什么才能正确呈现此字段?

【问题讨论】:

    标签: jquery python wtforms flask-wtforms


    【解决方案1】:

    WTForms process_formdata 方法会将这些从表单提交中提取出来并将它们存储在data 属性中。以下是您的访问代码的外观。您的authors 列表应该存储在一个可通过authors 键访问的可迭代对象中。

    from collections import namedtuple
    from wtforms.validators import Required
    from wtforms import Form
    from wtforms import TextField
    from wtforms import FieldList
    
    from webob.multidict import MultiDict
    
    class EditBook(Form):
        title = TextField('title', validators = [Required()])
        authors = FieldList(TextField())
    
    Book = namedtuple('Book', ['title', 'authors'])
    b1 = Book('Title1', ['author1', 'author2'])
    
    # drop them in a dictionary 
    data_in={'title':b1.title, 'authors':b1.authors}
    
    # Build form and print
    form = EditBook(data=MultiDict(data_in))
    
    # lets get some data
    print form.data
    print form.data['title']
    print form.data['authors']
    

    【讨论】:

    • 我的输入没有与 EditBook 连接,尽管我将它们附加到它。
    • 不确定你的意思。 HTTP 是无状态的。这个答案模拟了您发布时会发生什么。 POST 发生在您动态添加 author 输入之后。如果您的 author 值不在请求中,则浏览器端有问题。
    【解决方案2】:

    Form 对象是可迭代的并返回它的字段:

    for f in form:
      print(f"{f.id}: {f.data}")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多