Класс 'FloatField' не определяет '__truediv__' - PullRequest
0 голосов
/ 28 декабря 2018

Когда я пытаюсь получить значения переменных 'height' и 'weight' для использования при расчете, в строке 8 появляется ошибка:

'Класс' FloatField 'не определяет' truediv ', поэтому оператор' / 'не может использоваться в его экземплярах.Эта проверка обнаруживает имена, которые должны разрешаться, но не разрешаются.Из-за динамического распределения и типизации утки это возможно в ограниченном, но полезном количестве случаев.Элементы верхнего уровня и класса поддерживаются лучше, чем элементы экземпляра. '

Формы предназначены для хранения в базе данных (персистентность / полка) и отображения всех значений.Мне удалось сохранить и отобразить переменные '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'

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

В конце концов я получил его, изменив свой Class Record () в другом файле, где я создал еще один атрибут данных self .__ bmi, и мне удалось вместо этого выполнить вычисления внутри функции def get_bmi (), так что в целом то, что я хотелотображение выполнено

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 %}
0 голосов
/ 28 декабря 2018

Формы предоставляют 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)

Теперь в вашем шаблоне bmi.html внутри templates выведите форму в виде:

 <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...