Flask-WTF表格填充整数字段和无线电字段

时间:2014-05-08 03:03:56

标签: python flask jinja2 wtforms

我试图填写一个完整的表格,条件是其中一个字段说“MATH& 142”。这似乎适用于某些领域,而不适用于其他领域。

以下是代码:

def formFill():
    @app.route('/formFill', methods=['GET', 'POST'])
    form = cifForm()
    if form.courseNum.data == 'MATH& 142':
        form.courseTitle.data = 'Precalculus II : Trigonometry' 
        form.publishInCollegeCatalog.data = True #NOT WORKING - Radio Field
        form.numCredit.data = int(5)  #NOT WORKING - Integer Field

class cifForm(Form):
    courseTitle = StringField('Course Title')
    publishInCollegeCatalog = RadioField('Publish in college catalog?', choices=[(True,'Yes'),(False,'No')], ) 
    numCredit = IntegerField('Credits')
    submit = SubmitField('Submit')

我试图在提交时打印出一些值,并注意到有关类型

的一些有趣内容
@app.route('/formFill', methods=['GET', 'POST'])
def formFill():
     form = cifForm()
    if form.courseNum.data == 'MATH& 142':
        form.courseTitle.data = 'Precalculus II : Trigonometry' 
        form.publishInCollegeCatalog.data = True# NOT WORKING
        print form.numCredit.data
        print type(form.numCredit.data)
        print form.creditIsVariable.data
        print type(form.numCredit.data)

控制台:

5
<type 'int'>
False
<type 'int'>

当我以编程方式设置时,我也会打印出来:

@app.route('/formFill', methods=['GET', 'POST'])
def formFill():
    form = cifForm()
    if form.courseNum.data == 'MATH& 142':
        form.courseTitle.data = 'Precalculus II : Trigonometry' 
        form.publishInCollegeCatalog.data = True# NOT WORKING
        form.numCredit.data = int(5) 
        print form.numCredit.data
        print type(form.numCredit.data)
        form.creditIsVariable.data = bool(False) #: NOT WORKING
        print form.creditIsVariable.data
        print type(form.numCredit.data)

控制台:

5
<type 'int'>
False
<type 'int'>

输出相同,变量赋值有效,但我没有在渲染表格中看到这些值。

2 个答案:

答案 0 :(得分:2)

我试图重新创建你的问题,但我只是没有看到它。但是,您可能会发现我的结果与RadioField一样有趣,我至少可以指出您正在寻找一个有效的解决方案。

这是你的问题:

form.publishInCollegeCatalog.data = True# NOT WORKING

这里简单的解决方法是简单地做这样的事情:

form.publishInCollegeCatalog.data = str(True)# WORKING

您正在将True'True' 混为一起:

工作示例:

from collections import namedtuple
from wtforms.validators import Required
from wtforms import Form
from wtforms import RadioField

from webob.multidict import MultiDict

class SimpleForm(Form):
    example = RadioField('Label',
            choices=[(True,'Truthy'),(False,'Falsey')])

# when this data is processed True is coerced to its
# string representation 'True'
data = {'example': True}

form = SimpleForm(data=MultiDict(data))

# checking form.data here yields - {'example': u'True'}    

# This prints the radio markup using the value `True`
print form.example

form.example.data = True

# This prints the radio using the value True
print form.example

他们渲染什么?

第一次印刷:

enter image description here

第二次打印:

enter image description here

说明:

RadioField呈现所选择的value部分的字符串表示。这与 HTML 规范一致。在这里治疗。

  

value = string

     

给出输入元素的默认值。

规范的value部分被视为字符串,以支持各种值。 WTForms 别无选择,只能在执行其处理步骤时将此类型视为字符串。它是最不常见的分母。

但是我的注意力呢?

这再一次不是我能够重现的问题。我创建的每个IntegerField行为完全相同。如果您按照下面的示例,结果应该相同。

class SimpleForm(Form):
    my_int = IntegerField()

data = {'my_int': int(5)}

form = SimpleForm(data=MultiDict(data))

print form.my_int

form.my_int.data = int(6)

print form.my_int

打印

<input id="my_int" name="my_int" type="text" value="5">
<input id="my_int" name="my_int" type="text" value="6">

这是人们所期望的。

答案 1 :(得分:0)

您可以尝试使用:

form.numCredit.data = int(5) # This is defined as integer in your form
form.creditIsVariable.data = bool(False) # and so on

wtforms期望值采用正确的数据类型