РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
412 of 818 menu

DecimalField

Поле DecimalField применяется в классах форм для обработки десятичных чисел, таких как цены, проценты или координаты. При получении данных из запроса поле выполняет валидацию, проверяет количество цифр до и после запятой, а затем преобразует строку в объект Decimal. Это поле особенно полезно для финансовых расчётов, где важна точность.

Синтаксис

field = forms.DecimalField( max_digits=None, decimal_places=None, max_value=None, min_value=None, **kwargs )

Параметры DecimalField:

  • max_digits - общее максимальное количество цифр (включая цифры после запятой). Обязательный параметр, если не указан decimal_places.
  • decimal_places - количество знаков после запятой. Обязательный параметр, если не указан max_digits.
  • max_value - максимальное допустимое значение (тип Decimal или число).
  • min_value - минимальное допустимое значение (тип Decimal или число).

Остальные параметры наследуются от Field: required, label, initial, help_text, error_messages, disabled.

Пример

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

from django import forms class ProductForm(forms.Form): name = forms.CharField(max_length=100) price = forms.DecimalField( max_digits=10, decimal_places=2, label="Price", help_text="Enter price with two decimal places" )

При отправке формы с корректным значением поле преобразует строку в Decimal:

from django import forms from decimal import Decimal class ProductForm(forms.Form): price = forms.DecimalField(max_digits=10, decimal_places=2) form = ProductForm({'price': '19.99'}) if form.is_valid(): res = form.cleaned_data['price'] print(type(res)) print(res)

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

"<class 'decimal.Decimal'>" "19.99"

Пример

Добавим ограничения на минимальное и максимальное значение для поля рейтинга:

from django import forms from decimal import Decimal class ReviewForm(forms.Form): rating = forms.DecimalField( max_digits=3, decimal_places=1, min_value=Decimal('0.0'), max_value=Decimal('5.0'), label="Rating" ) comment = forms.CharField(widget=forms.Textarea) form = ReviewForm({'rating': '4.5', 'comment': 'Good product'}) if form.is_valid(): print(form.cleaned_data['rating'])

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

"4.5"

Пример

Попробуем отправить некорректное значение с большим количеством знаков после запятой:

from django import forms class ProductForm(forms.Form): price = forms.DecimalField(max_digits=5, decimal_places=2) form = ProductForm({'price': '123.456'}) if not form.is_valid(): print(form.errors['price'])

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

"['Ensure that there are no more than 2 decimal places.']"

Пример

Используем DecimalField в форме на основе модели с полем DecimalField:

from django.db import models from django import forms class Product(models.Model): name = models.CharField(max_length=100) price = models.DecimalField(max_digits=10, decimal_places=2) class ProductForm(forms.ModelForm): class Meta: model = Product fields = ['name', 'price'] form = ProductForm({'name': 'Smartphone', 'price': '999.99'}) if form.is_valid(): product = form.save() print(product.price)

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

"999.99"

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

  • поле FloatField,
    которое принимает числа с плавающей точкой
  • поле IntegerField,
    которое принимает целые числа
  • валидатор DecimalValidator,
    который проверяет количество цифр в числе
  • валидаторы MaxValueValidator и MinValueValidator,
    которые ограничивают диапазон значений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить