Поле формы DecimalField
Поле DecimalField применяется в классе формы
Flask-WTF и создаёт поле для ввода десятичных чисел.
При отправке формы значение преобразуется в объект
Decimal из модуля decimal. Первым параметром
передаётся подпись поля, которая отображается рядом
с элементом ввода. В отличие от FloatField, это
поле хранит точное значение без потери разрядов,
что важно для денежных сумм и научных расчётов.
Поле принимает параметры places и rounding.
Параметр places задаёт количество знаков после
запятой для округления. Параметр rounding
определяет режим округления из модуля decimal.
Синтаксис
from wtforms import DecimalField
field = DecimalField(label, [validators], [places], [rounding])
Пример
Давайте создадим форму с полем для ввода цены:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class PriceForm(FlaskForm):
price = DecimalField('Price', [DataRequired()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = PriceForm()
res = None
if form.validate_on_submit():
res = form.price.data
return render_template('index.html', form=form, res=res)
Теперь создадим шаблон для вывода формы:
<form method="post">
{{ form.csrf_token }}
<p>{{ form.price.label }} {{ form.price }}</p>
<p>{{ form.submit }}</p>
</form>
{% if res %}
<p>Result: {{ res }}</p>
{% endif %}
Если ввести значение 12.34 и отправить форму,
результат выполнения кода будет таким:
12.34
Пример
Давайте зададим точность в два знака после запятой:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class MoneyForm(FlaskForm):
amount = DecimalField('Amount', [DataRequired()], places=2)
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MoneyForm()
res = None
if form.validate_on_submit():
res = form.amount.data
return render_template('index.html', form=form, res=res)
Если ввести значение 10.567 и отправить форму,
результат выполнения кода будет таким:
10.57
Смотрите также
-
поле
FloatField,
которое принимает числа с плавающей точкой -
поле
IntegerField,
которое принимает целые числа -
валидатор
NumberRange,
который проверяет число на попадание в диапазон -
валидатор
DataRequired,
который требует обязательного заполнения поля