Поле FloatField
Поле FloatField применяется в моделях Django для хранения чисел с плавающей точкой. Оно преобразуется в тип данных double в базе данных и позволяет хранить дробные числа с заданной точностью. Поле принимает аргументы max_value и min_value для ограничения диапазона допустимых значений, а также blank и null для контроля обязательности поля.
Синтаксис
from django.db import models
class ModelName(models.Model):
field_name = models.FloatField(
max_value=100.0,
min_value=0.0,
null=True,
blank=True,
default=0.0
)
Пример
Давайте создадим модель продукта с полем для хранения его цены:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.FloatField()
discount = models.FloatField(default=0.0)
def __str__(self):
return self.name
Пример
Создадим несколько продуктов с разными ценами и применим фильтрацию:
from myapp.models import Product
# Create products with float prices
product1 = Product.objects.create(name="Laptop", price=1200.50)
product2 = Product.objects.create(name="Mouse", price=25.99)
product3 = Product.objects.create(name="Keyboard", price=89.90)
# Filter products with price greater than 100
expensive_products = Product.objects.filter(price__gt=100.0)
for product in expensive_products:
print(product.name, product.price)
Результат выполнения кода:
"Laptop 1200.5"
"Keyboard 89.9"
Пример
Давайте используем поле FloatField с ограничениями на минимальное и максимальное значение:
from django.db import models
class StudentScore(models.Model):
student_name = models.CharField(max_length=50)
score = models.FloatField(
min_value=0.0,
max_value=100.0,
help_text="Score must be between 0 and 100"
)
def __str__(self):
return f"{self.student_name}: {self.score}"
Пример
Продемонстрируем операции с числами с плавающей точкой в запросах:
from myapp.models import Product
from django.db.models import F, Avg, Sum
# Increase all prices by 10%
Product.objects.update(price=F('price') * 1.1)
# Get average price of all products
avg_price = Product.objects.aggregate(Avg('price'))
# Get total sum of all products
total_sum = Product.objects.aggregate(Sum('price'))
print(avg_price, total_sum)
Результат выполнения кода:
"{'price__avg': 48.33, 'price__sum': 145.0}"
Смотрите также
-
поле
IntegerField,
которое хранит целые числа -
поле
DecimalField,
которое хранит числа с фиксированной точностью -
поле
BigIntegerField,
которое хранит большие целые числа -
поле
PositiveIntegerField,
которое хранит положительные целые числа