Class 'FloatField' 没有定义 '__truediv__'

Class 'FloatField' does not define '__truediv__'

当我尝试获取用于计算的 'height' 和 'weight' 变量的值时,我在第 8 行遇到错误:

'Class 'FloatField' 没有定义 'truediv',因此不能在其实例上使用 '/' 运算符。此检查检测应解析但未解析的名称。由于动态调度和鸭子类型,这在有限但有用的情况下是可能的。顶级项目和 class 级项目比实例项目得到更好的支持。'

表格用于存储到数据库中 (Persistence/Shelve) 并显示所有值。我已经能够存储和显示 'height, weight and id' 变量,但我在尝试添加 'bmi' 变量时卡住了。

from wtforms import Form, StringField, validators, SubmitField, 
FloatField


class AddRecordForm(Form):
    id = StringField('User', [validators.DataRequired()])
    height = FloatField('Height in meters (e.g 1.75)', [validators.Length(min=4, max=4), validators.DataRequired()])
    weight = FloatField('Weight in kilograms', [validators.Length(min=1), validators.DataRequired()])
    bmi = weight/height*height
    submit = SubmitField("Update/Add your Health Information")

我想做的是使用变量 'height' & 'weight' 的输入值来计算 'bmi'

表单提供最高级别API。它们包含您的字段定义、委托验证、接受输入、汇总错误,并且通常充当将所有内容粘合在一起的粘合剂。

要从表单获取输入并在您的应用程序中使用它,您需要在模板中呈现表单实例并在视图函数部分计算值。

from wtforms import Form, StringField, validators, SubmitField,  FloatField


class AddRecordForm(Form):
    id = StringField('User', [validators.DataRequired()])
    height = FloatField('Height in meters (e.g 1.75)', [validators.Length(min=4, max=4), validators.DataRequired()])
    weight = FloatField('Weight in kilograms', [validators.Length(min=1), validators.DataRequired()])

    submit = SubmitField("Update/Add your Health Information")

#Some thing like this must be your View function part

from flask import flash, redirect, url_for, session, render_template
app = Flask(__name__)
@app.route('/bmi', methods=['GET', 'POST'])
def bmi():
    form = AddRecordForm()
    if form.validate_on_submit():
        height = form.height.data
        weight = form.weight.data
        bmi = weight/height*height
        #Do database operations here
    for field, errors in AddRecordForm().errors.items(): 
        for error in errors: 
           flash(u"Error in the %s field - %s" % (getattr(form, field).label.text, 'error')) 

    return render_template('bmi.html', form=form)

现在,在 templates 目录中的 bmi.html 模板中,将表单呈现为:

 <form action="" method="post">
    {{ form.hidden_tag() }}
     <p>
        {{ form.id.label }}<br>
        {{ form.id }}
    </p>
    <p>
        {{ form.height.label }}<br>
        {{ form.height }}
    </p>
    <p>
        {{ form.weight.label }}<br>
        {{ form.weight}}
    </p>

    <p>{{ form.submit }}</p>
</form>

我最终通过修改另一个文件中的 Class Record() 得到了它,我在该文件中创建了另一个数据属性 self.__bmi 并且我设法在函数 def [=21] 中完成了计算=]() 相反,总的来说我想显示的内容已经完成了

Record.py

class Record:
def __init__(self, height, weight, id):
    self.__height = height
    self.__weight = weight
    self.__id = id
    self.__bmi = (float(weight)/(float(height)*float(height)))

def get_height(self):
    return self.__height

def get_weight(self):
    return self.__weight

def get_id(self):
    return self.__id

def get_bmi(self):
    return self.__bmi

summary.html

{% extends 'sportshealth.html' %}

{% block header %}
  <h1>{% block title %}Your health statistics!{% endblock %}</h1>
{% endblock %}

{% block content %}
<h1>These are your health statistics {{ name }}</h1>
<table style="width:50%">
    <tr>
        <th>ID</th>
        <th>Height</th>
        <th>Weight</th>
        <th>BMI</th>
    </tr>
    {% for item in records %}
    <tr>
        <td>{{ item.get_id() }}</td>
        <td>{{ item.get_height() }}</td>
        <td>{{ item.get_weight() }}</td>
        <td>{{ item.get_bmi() }}</td>
    {% endfor %}

</table>
{% endblock %}