Поле IntegerField

Поле IntegerField применяется в моделях Django для хранения целочисленных значений. Это одно из наиболее часто используемых числовых полей. При создании модели поле преобразуется в столбец базы данных с типом INTEGER (или эквивалентным в зависимости от используемой СУБД). Поле принимает значения в диапазоне от -2147483648 до 2147483647. Для работы с большими числами следует использовать BigIntegerField, а для хранения только положительных чисел - PositiveIntegerField.

Синтаксис

pythonfrom django.db import models

class MyModel(models.Model):
  my_field = models.IntegerField(**options)

Параметры, которые можно передать в поле IntegerField:

Пример . Определение модели

Рассмотрим модель Product с полем IntegerField для хранения количества товара на складе:

pythonfrom django.db import models

class Product(models.Model):
  name = models.CharField(max_length=100)
  price = models.DecimalField(max_digits=10, decimal_places=2)
  stock = models.IntegerField(default=0)
  minimum_stock = models.IntegerField(default=10)

  def __str__(self):
    return self.name

Создание и сохранение объектов

Создадим продукт и сохраним его в базе данных:

pythonfrom myapp.models import Product

# Create a new product
product = Product(
  name="Laptop",
  price=999.99,
  stock=50,
  minimum_stock=10
)
product.save()

print(product.stock)

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

python"50"

Выборка по числовому значению

Отфильтруем продукты, у которых количество на складе меньше минимального порога:

pythonfrom myapp.models import Product

low_stock = Product.objects.filter(stock__lt=models.F('minimum_stock'))
for product in low_stock:
  print(f"{product.name}: {product.stock}")

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

python"Laptop: 50"
"Monitor: 5"

Обновление числовых значений

Используем метод update для увеличения количества товара на складе:

pythonfrom myapp.models import Product
from django.db.models import F

# Increase stock by 10 for all products
updated = Product.objects.update(stock=F('stock') + 10)
print(f"Updated {updated} products")

# Show first product stock
product = Product.objects.first()
print(product.stock)

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

python"Updated 3 products"
"60"

Использование с агрегацией

Вычислим общее количество товаров на складе с помощью агрегации:

pythonfrom myapp.models import Product
from django.db.models import Sum

total_stock = Product.objects.aggregate(total=Sum('stock'))
print(total_stock)

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

python"{'total': 180}"

Использование choices

Определим модель Order с полем status, использующим choices:

pythonfrom django.db import models

class Order(models.Model):
  STATUS_CHOICES = [
    (1, 'Pending'),
    (2, 'Processing'),
    (3, 'Shipped'),
    (4, 'Delivered'),
    (5, 'Cancelled'),
  ]

  product = models.CharField(max_length=100)
  quantity = models.IntegerField()
  status = models.IntegerField(choices=STATUS_CHOICES, default=1)

  def __str__(self):
    return f"{self.product} - {self.get_status_display()}"

Создадим заказ и выведем его статус:

pythonfrom myapp.models import Order

order = Order.objects.create(
  product="Phone",
  quantity=2,
  status=3
)

print(order.status)
print(order.get_status_display())

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

python"3"
"Shipped"

Валидация значений

Django автоматически проверяет, что значение находится в допустимом диапазоне. При попытке сохранить число вне диапазона будет вызвано исключение:

pythonfrom myapp.models import Order
from django.core.exceptions import ValidationError

try:
  order = Order(
    product="Test",
    quantity=5,
    status=10  # Invalid choice
  )
  order.full_clean()
  order.save()
except ValidationError as e:
  print(f"Validation error: {e}")

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

python"Validation error: {'status': ['Value 10 is not a valid choice.']}"

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

  • поле BigIntegerField,
    которое хранит числа в диапазоне от -9223372036854775808 до 9223372036854775807
  • поле PositiveIntegerField,
    которое хранит только положительные целые числа
  • поле SmallIntegerField,
    которое хранит числа в диапазоне от -32768 до 32767
  • поле FloatField,
    которое хранит числа с плавающей точкой