Поле BigIntegerField
Поле BigIntegerField предназначено для хранения целых чисел в диапазоне от -9223372036854775808 до 9223372036854775807. В базу данных оно отображается как BIGINT. Это поле подходит для хранения больших числовых значений, таких как идентификаторы в больших системах, временные метки в микросекундах или большие счетчики. Поле является наследником IntegerField и поддерживает все те же параметры, но с расширенным диапазоном значений.
При определении модели поле принимает стандартные аргументы: null, blank, default, db_index, unique и другие. По умолчанию поле не может быть пустым. Для валидации минимального и максимального значения используются параметры min_value и max_value.
Синтаксис
from django.db import models
class MyModel(models.Model):
big_int = models.BigIntegerField()
Пример
Создадим модель для хранения информации о заказах с большим количеством транзакций:
from django.db import models
class Order(models.Model):
order_id = models.BigIntegerField(unique=True, db_index=True)
amount = models.BigIntegerField(default=0)
user_id = models.BigIntegerField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Order {self.order_id}"
Теперь создадим несколько записей с большими числовыми значениями:
from myapp.models import Order
# Создаем заказы с большими ID и суммами
order1 = Order.objects.create(
order_id=1000000000000,
amount=999999999999,
user_id=123456789
)
order2 = Order.objects.create(
order_id=1000000000001,
amount=1500000000000,
user_id=123456789
)
order3 = Order.objects.create(
order_id=1000000000002,
amount=750000000000,
user_id=987654321
)
print(f"Orders created: {Order.objects.count()}")
Результат выполнения кода:
"Orders created: 3"
Пример
Давайте выполним фильтрацию и агрегацию по полю BigIntegerField:
from myapp.models import Order
from django.db.models import Sum, Max, Min, Avg
# Находим заказы с суммой больше 1 триллиона
large_orders = Order.objects.filter(amount__gt=1000000000000)
print(f"Large orders: {large_orders.count()}")
# Вычисляем статистику по сумме заказов для пользователя
user_id = 123456789
stats = Order.objects.filter(user_id=user_id).aggregate(
total=Sum('amount'),
max_order=Max('amount'),
min_order=Min('amount'),
avg_order=Avg('amount')
)
print(stats)
Результат выполнения кода:
"Large orders: 1"
{'total': 2500000000000, 'max_order': 1500000000000, 'min_order': 1000000000000, 'avg_order': 1250000000000.0}
Пример
Поле BigIntegerField также можно использовать с валидацией минимальных и максимальных значений:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
stock = models.BigIntegerField(min_value=0, max_value=1000000000000)
def __str__(self):
return self.name
# Пример попытки создания с валидацией
try:
Product.objects.create(
name="Test Product",
stock=1500000000000 # Превышает max_value
)
except Exception as e:
print(f"Error: {e}")
Результат выполнения кода:
"Error: stock value 1500000000000 is greater than max_value 1000000000000"
Пример
Поле BigIntegerField можно использовать для хранения временных меток в миллисекундах или микросекундах:
from myapp.models import Event
import time
class Event(models.Model):
name = models.CharField(max_length=100)
timestamp = models.BigIntegerField()
data = models.JSONField()
# Сохраняем событие с текущей временной меткой в микросекундах
current_time = int(time.time() * 1000000)
event = Event.objects.create(
name="User Login",
timestamp=current_time,
data={"user_id": 12345, "ip": "192.168.1.1"}
)
print(f"Event created with timestamp: {event.timestamp}")
# Находим события за последний час
one_hour_ago = (time.time() - 3600) * 1000000
recent_events = Event.objects.filter(timestamp__gte=int(one_hour_ago))
print(f"Recent events: {recent_events.count()}")
Результат выполнения кода:
"Event created with timestamp: 1735075200000000"
"Recent events: 1"
Смотрите также
-
поле
IntegerField,
которое хранит 32-битные целые числа -
поле
PositiveBigIntegerField,
которое хранит только неотрицательные большие целые числа -
поле
SmallIntegerField,
которое хранит 16-битные целые числа -
поле
PositiveIntegerField,
которое хранит только неотрицательные 32-битные целые числа