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

DecimalField

Поле DecimalField применяется в моделях Django для хранения чисел с фиксированной точностью, таких как финансовые показатели, цены или любые другие значения, где важна точность вычислений. В отличие от FloatField, DecimalField хранит числа в десятичном виде без потери точности. Основные параметры поля: max_digits - общее количество цифр в числе, и decimal_places - количество цифр после десятичной запятой. Также доступны стандартные параметры полей Django, такие как null, blank, default и другие.

Синтаксис

from django.db import models class MyModel(models.Model): price = models.DecimalField( max_digits=10, decimal_places=2, default=0.00 )

Пример

Давайте создадим модель Product с полями для цены и наценки:

from django.db import models class Product(models.Model): name = models.CharField(max_length=100) price = models.DecimalField( max_digits=10, decimal_places=2, default=0.00 ) margin = models.DecimalField( max_digits=5, decimal_places=2, default=0.00 ) def __str__(self): return self.name

Пример

Создадим несколько товаров с различными ценами и наценками:

from myapp.models import Product # Creating products product1 = Product.objects.create( name="Laptop", price=999.99, margin=10.00 ) product2 = Product.objects.create( name="Mouse", price=25.50, margin=5.00 ) product3 = Product.objects.create( name="Keyboard", price=75.75, margin=8.00 ) # Display all products for product in Product.objects.all(): print(f"{product.name}: ${product.price}")

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

"Laptop: $999.99" "Mouse: $25.50" "Keyboard: $75.75"

Пример

Выполним арифметические операции с полем DecimalField, используя аннотации:

from django.db.models import F, ExpressionWrapper, fields from myapp.models import Product # Calculate price with margin using F expressions products_with_total = Product.objects.annotate( total_price=ExpressionWrapper( F('price') * (1 + F('margin') / 100), output_field=fields.DecimalField( max_digits=10, decimal_places=2 ) ) ) for product in products_with_total: print(f"{product.name}: total ${product.total_price}")

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

"Laptop: total $1099.99" "Mouse: total $26.78" "Keyboard: total $81.81"

Пример

Фильтрация записей с использованием DecimalField:

from myapp.models import Product # Find products with price greater than 50 expensive_products = Product.objects.filter(price__gt=50.00) for product in expensive_products: print(product.name) # Find products with price between 20 and 100 mid_range_products = Product.objects.filter( price__gte=20.00, price__lte=100.00 ) for product in mid_range_products: print(f"{product.name}: ${product.price}")

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

"Laptop" "Keyboard" "Mouse: $25.50" "Keyboard: $75.75"

Пример

Агрегация данных с использованием DecimalField:

from django.db.models import Avg, Sum, Max, Min from myapp.models import Product # Calculate statistics stats = Product.objects.aggregate( avg_price=Avg('price'), sum_margin=Sum('margin'), max_price=Max('price'), min_price=Min('price') ) print(f"Average price: {stats['avg_price']}") print(f"Total margin: {stats['sum_margin']}") print(f"Max price: {stats['max_price']}") print(f"Min price: {stats['min_price']}")

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

"Average price: 367.08" "Total margin: 23.00" "Max price: 999.99" "Min price: 25.50"

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

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