PositiveBigIntegerField
Поле PositiveBigIntegerField представляет собой целочисленное поле в Django, предназначенное для хранения положительных чисел большой разрядности в базе данных. Оно поддерживает значения от 0 до 9 223 372 036 854 775 807 включительно. Это поле часто используется для хранения больших идентификаторов, номеров транзакций, количественных показателей или любых других данных, где требуются большие целые положительные числа.
В базах данных поле PositiveBigIntegerField создает столбец типа unsigned big integer. В зависимости от используемой СУБД, это может быть BIGINT UNSIGNED в MySQL, BIGINT с ограничением CHECK в PostgreSQL или аналогичный тип в других базах. Поле автоматически включает валидацию, проверяющую, что значение не отрицательное и не превышает максимально допустимое.
Параметры конструктора аналогичны другим числовым полям: null, blank, default, primary_key, unique, db_index и другие. По умолчанию поле не может быть пустым и не имеет значения по умолчанию.
Синтаксис
from django.db import models
field = models.PositiveBigIntegerField(
verbose_name=None,
name=None,
primary_key=False,
max_value=None,
min_value=None,
**options
)
Пример . Определение модели
Рассмотрим пример модели, использующей PositiveBigIntegerField для хранения различных данных:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=200)
sku = models.PositiveBigIntegerField(unique=True)
stock_quantity = models.PositiveBigIntegerField(default=0)
price_in_cents = models.PositiveBigIntegerField()
views_count = models.PositiveBigIntegerField(default=0)
def __str__(self):
return self.name
Пример . Создание и сохранение записи
Создадим экземпляр модели с большими положительными числами и сохраним его в базу данных:
from myapp.models import Product
product = Product.objects.create(
name="Smartphone",
sku=1000000000001,
stock_quantity=1500,
price_in_cents=59999,
views_count=1000000
)
print(product.id)
Результат выполнения кода:
"5"
Пример . Получение и обновление значения
Получим запись и изменим значение поля PositiveBigIntegerField:
from myapp.models import Product
product = Product.objects.get(sku=1000000000001)
product.stock_quantity += 500
product.views_count += 15000
product.save()
print(f"Stock: {product.stock_quantity}")
print(f"Views: {product.views_count}")
Результат выполнения кода:
"Stock: 2000"
"Views: 1015000"
Пример . Валидация значений
При попытке сохранить отрицательное или слишком большое значение поле выбрасывает исключение:
from django.db import models
from django.core.exceptions import ValidationError
from myapp.models import Product
try:
product = Product(
name="Invalid Product",
sku=9999999999999999999,
stock_quantity=-100,
price_in_cents=1000,
views_count=0
)
product.full_clean()
except ValidationError as e:
print(e)
Результат выполнения кода:
"{'sku': ['Ensure this value is less than or equal to 9223372036854775807.'], 'stock_quantity': ['Ensure this value is greater than or equal to 0.']}"
Пример . Использование в формах
Поле PositiveBigIntegerField автоматически создает соответствующее поле формы, которое проверяет ввод пользователя:
from django import forms
from myapp.models import Product
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name', 'sku', 'stock_quantity', 'price_in_cents', 'views_count']
form_data = {
'name': 'Laptop',
'sku': 2000000000002,
'stock_quantity': 2500,
'price_in_cents': 99999,
'views_count': 500000
}
form = ProductForm(form_data)
if form.is_valid():
product = form.save()
print(product.sku)
Результат выполнения кода:
"2000000000002"
Смотрите также
-
поле
PositiveIntegerField,
которое хранит целые положительные числа в меньшем диапазоне -
поле
BigIntegerField,
которое хранит целые числа со знаком и поддерживает отрицательные значения -
поле
PositiveSmallIntegerField,
которое хранит положительные целые числа малой разрядности -
поле
AutoField,
которое автоматически генерирует возрастающие целочисленные значения