Поле FloatField

Поле FloatField применяется в моделях Django для хранения чисел с плавающей точкой. Оно преобразуется в тип данных double в базе данных и позволяет хранить дробные числа с заданной точностью. Поле принимает аргументы max_value и min_value для ограничения диапазона допустимых значений, а также blank и null для контроля обязательности поля.

Синтаксис

pythonfrom 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
  )

Пример

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

pythonfrom 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

Пример

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

pythonfrom 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)

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

python"Laptop 1200.5"
"Keyboard 89.9"

Пример

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

pythonfrom 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}"

Пример

Продемонстрируем операции с числами с плавающей точкой в запросах:

pythonfrom 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)

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

python"{'price__avg': 48.33, 'price__sum': 145.0}"

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

  • поле IntegerField,
    которое хранит целые числа
  • поле DecimalField,
    которое хранит числа с фиксированной точностью
  • поле BigIntegerField,
    которое хранит большие целые числа
  • поле PositiveIntegerField,
    которое хранит положительные целые числа