FloatField

Поле FloatField в формах Django предназначено для ввода и валидации чисел с плавающей точкой. Оно преобразует входящие данные в объект типа float в Python. Это поле полезно, когда необходимо принимать дробные числа, например, цену товара, рейтинг или координаты. В качестве виджета по умолчанию используется NumberInput, который в HTML отображается как поле ввода числа.

При создании формы поле FloatField принимает различные параметры для настройки валидации: max_value и min_value для ограничения диапазона, required для указания обязательности поля, initial для начального значения, а также label и help_text для отображения подписей и подсказок.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  my_field = forms.FloatField(
    label="Метка поля",
    help_text="Подсказка",
    required=True,
    min_value=0.0,
    max_value=100.0,
    initial=0.0
  )

Пример

Создадим простую форму для ввода рейтинга товара:

pythonfrom django import forms

class ProductRatingForm(forms.Form):
  rating = forms.FloatField(
    label="Рейтинг",
    help_text="Введите число от 0.0 до 5.0",
    min_value=0.0,
    max_value=5.0,
    initial=2.5
  )

В шаблоне форма будет отображаться как поле ввода числа. После отправки формы можно получить очищенные данные:

pythonfrom django.shortcuts import render
from .forms import ProductRatingForm

def rate_product(request):
  if request.method == "POST":
    form = ProductRatingForm(request.POST)
    if form.is_valid():
      rating = form.cleaned_data["rating"]
      print(rating)
  else:
    form = ProductRatingForm()
  return render(request, "rate.html", {"form": form})

Результат выполнения кода:

python4.75

Пример

Поле FloatField также поддерживает необязательный параметр step_size, который задает шаг изменения значения в HTML-виджете:

pythonfrom django import forms

class ProductForm(forms.Form):
  price = forms.FloatField(
    label="Цена товара",
    help_text="Укажите цену товара в долларах",
    min_value=0.01,
    max_value=1000.00,
    initial=9.99,
    step_size=0.01
  )
  discount = forms.FloatField(
    label="Скидка",
    help_text="Укажите размер скидки в процентах",
    min_value=0.0,
    max_value=100.0,
    initial=0.0
  )

При отправке формы данные проходят валидацию, и если они не соответствуют заданным ограничениям, в форму добавляются ошибки:

pythonfrom django.shortcuts import render
from .forms import ProductForm

def product_view(request):
  if request.method == "POST":
    form = ProductForm(request.POST)
    if form.is_valid():
      price = form.cleaned_data["price"]
      discount = form.cleaned_data["discount"]
      final_price = price - price * (discount / 100)
      print(final_price)
  else:
    form = ProductForm()
  return render(request, "product.html", {"form": form})

Результат выполнения кода:

python79.92

Смотрите также

  • поле IntegerField,
    которое используется для целых чисел
  • поле DecimalField,
    которое используется для точных чисел
  • класс Form,
    базовый класс для создания форм
  • класс ModelForm,
    который создает формы на основе моделей