Поле IntegerField
Поле IntegerField применяется в моделях Django для хранения целочисленных значений. Это одно из наиболее часто используемых числовых полей. При создании модели поле преобразуется в столбец базы данных с типом INTEGER (или эквивалентным в зависимости от используемой СУБД). Поле принимает значения в диапазоне от -2147483648 до 2147483647. Для работы с большими числами следует использовать BigIntegerField, а для хранения только положительных чисел - PositiveIntegerField.
Синтаксис
from django.db import models
class MyModel(models.Model):
my_field = models.IntegerField(**options)
Параметры, которые можно передать в поле IntegerField:
-
null- определяет, может ли поле хранить значение NULL (по умолчанию False); -
blank- определяет, может ли поле быть пустым в формах (по умолчанию False); -
default- значение по умолчанию для поля; -
choices- кортеж вариантов для выбора; -
validators- список валидаторов для проверки значения; -
db_column- имя столбца в базе данных; -
db_index- создает индекс для поля (по умолчанию False); -
primary_key- делает поле первичным ключом (по умолчанию False); -
editable- определяет, можно ли редактировать поле через админку (по умолчанию True); -
help_text- текст подсказки для поля.
Пример . Определение модели
Рассмотрим модель Product с полем IntegerField для хранения количества товара на складе:
from 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
Создание и сохранение объектов
Создадим продукт и сохраним его в базе данных:
from 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)
Результат выполнения кода:
"50"
Выборка по числовому значению
Отфильтруем продукты, у которых количество на складе меньше минимального порога:
from 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}")
Результат выполнения кода:
"Laptop: 50"
"Monitor: 5"
Обновление числовых значений
Используем метод update для увеличения количества товара на складе:
from 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)
Результат выполнения кода:
"Updated 3 products"
"60"
Использование с агрегацией
Вычислим общее количество товаров на складе с помощью агрегации:
from myapp.models import Product
from django.db.models import Sum
total_stock = Product.objects.aggregate(total=Sum('stock'))
print(total_stock)
Результат выполнения кода:
"{'total': 180}"
Использование choices
Определим модель Order с полем status, использующим choices:
from 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()}"
Создадим заказ и выведем его статус:
from myapp.models import Order
order = Order.objects.create(
product="Phone",
quantity=2,
status=3
)
print(order.status)
print(order.get_status_display())
Результат выполнения кода:
"3"
"Shipped"
Валидация значений
Django автоматически проверяет, что значение находится в допустимом диапазоне. При попытке сохранить число вне диапазона будет вызвано исключение:
from 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}")
Результат выполнения кода:
"Validation error: {'status': ['Value 10 is not a valid choice.']}"
Смотрите также
-
поле
BigIntegerField,
которое хранит числа в диапазоне от -9223372036854775808 до 9223372036854775807 -
поле
PositiveIntegerField,
которое хранит только положительные целые числа -
поле
SmallIntegerField,
которое хранит числа в диапазоне от -32768 до 32767 -
поле
FloatField,
которое хранит числа с плавающей точкой