标签: fieldlist

填充WTForms FormField FieldList,数据结果以字段形式显示HTML

我有一个Flask应用程序,我可以通过上传CSV文件填充表单数据然后读取.我想用从CSV读取的数据填充FieldList.但是,当我尝试填充数据时,它会将原始HTML输入到TextFields中,而不仅仅是我想要的值.我究竟做错了什么?

app.py

from flask import Flask, render_template, request, url_for
from flask.ext.wtf import Form
from wtforms import StringField, FieldList, FormField, SelectField
from wtforms.validators import DataRequired
from werkzeug.datastructures import MultiDict

app = Flask(__name__)
app.config['SECRET_KEY']='asdfjlkghdsf'

# normally student data is read in from a file uploaded, but for this demo we use dummy data
student_info=[("123","Bob Jones"),("234","Peter Johnson"),("345","Carly Everett"),
              ("456","Josephine Edgewood"),("567","Pat White"),("678","Jesse Black")]

class FileUploadForm(Form):
    pass

class StudentForm(Form):
    student_id = StringField('Student ID', validators = [DataRequired()])
    student_name = StringField('Student Name', validators = [DataRequired()])

class AddClassForm(Form): …
Run Code Online (Sandbox Code Playgroud)

python fieldlist flask wtforms flask-wtforms

19
推荐指数
2
解决办法
8071
查看次数

如何使用FormFields的WTForms FieldList?

我正在使用Flask建立一个网站,我在其中使用WTForms.在表单中,我现在想要使用FormFields的FieldList,如下所示:

class LocationForm(Form):
    location_id = StringField('location_id')
    city = StringField('city')

class CompanyForm(Form):
    company_name = StringField('company_name')
    locations = FieldList(FormField(LocationForm))
Run Code Online (Sandbox Code Playgroud)

所以让人们有能力进入一个有两个地点的公司(动态添加地点的时间比较晚)我在前面这样做:

<form action="" method="post" role="form">
    {{ companyForm.hidden_tag() }}
    {{ companyForm.company_name() }}
    {{ locationForm.location_id() }}
    {{ locationForm.city() }}
    {{ locationForm.location_id() }}
    {{ locationForm.city() }}
    <input type="submit" value="Submit!" />
</form>
Run Code Online (Sandbox Code Playgroud)

所以在提交时我打印的位置:

print companyForm.locations.data
Run Code Online (Sandbox Code Playgroud)

但我明白了

[{'location_id': u'', 'city': u''}]
Run Code Online (Sandbox Code Playgroud)

我可以使用locationForm打印第一个位置的值(见下文),但我仍然不知道如何获取第二个位置的数据.

print locationForm.location_id.data
print locationForm.city.data
Run Code Online (Sandbox Code Playgroud)

所以位置列表确实有一个带空值的dict,但是:

  1. 为什么地点列表只有一个,而不是两个?
  2. 为什么位置中的值是空的?

有谁知道我在这里做错了什么?欢迎所有提示!

python forms fieldlist flask wtforms

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

如何在validate_on_submit()块之后填充WTForms FieldList?

关于如何使用WTForms的FieldList,确实缺乏文档.所以,多亏了互联网,我已经能够将以下内容整合在一起:

形成:

class BranchForm(Form):
    name = StringField('Name', validators = [Required()])
    equipment = FieldList(SelectField('Equipment', validators=[Required()], coerce=int,
        choices = [(x.id, x.name) for x in Equipment.query.all()]))
    mod = FieldList(StringField('Method of Delivery', validators = [Optional()]))
Run Code Online (Sandbox Code Playgroud)

视图:

def edit_branch(id):
    branch = Branch.query.filter_by(id=id).first()

    #populate data_in to be used by BranchForm
    data_in = []
    for eq_obj in branch.equipment_assoc:
        data_in.append(('equipment', eq_obj.equipment.id))
        data_in.append(('mod', eq_obj.mod))

    editform = BranchForm(data=MultiDict(data_in))

    if editform.validate_on_submit():
        branch.name = editform.name.data

        db.session.add(branch)
        db.session.commit()

        return redirect('/admin/branches/' + str(branch.id))

    editform.name.data = branch.name

    return render_template("branch_edit.html",
        title="Edit Branch",
        branch = branch,
        editform …
Run Code Online (Sandbox Code Playgroud)

forms fieldlist flask wtforms

6
推荐指数
1
解决办法
2233
查看次数

嵌套 WTForms FieldList 在字段中生成 HTML

我看到同样奇怪的行为发布到Filling WTForms FormField FieldList with data results in HTML in fields,其中我的原始字段使用 HTML 而不是默认值呈现。在另一个示例中,FieldList 基本上在单个 FormField 上进行了一层深度堆叠。就我而言,我在 FormField 上的 FieldList 上创建 FieldList 的 2D 结构。我不知道我在哪里。

应用程序.py

import os
from flask import Flask, redirect, render_template, request, send_file, url_for
from flask_wtf import FlaskForm
from flask_wtf.csrf import CSRFProtect
from wtforms import FieldList, FormField, RadioField,  TextAreaField, validators

app = Flask(__name__)
csrf = CSRFProtect(app)
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY

#region FORMS
class TestCaseItem(FlaskForm) :
    pass_fail_radio = RadioField( '' , choices=[('Pass','Pass'), ('Fail','Fail')] ,  default='Pass' …
Run Code Online (Sandbox Code Playgroud)

python fieldlist flask wtforms flask-wtforms

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

标签 统计

fieldlist ×4

flask ×4

wtforms ×4

python ×3

flask-wtforms ×2

forms ×2