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 и другие. По умолчанию поле не может быть пустым и не имеет значения по умолчанию.

Синтаксис

pythonfrom django.db import models

field = models.PositiveBigIntegerField(
  verbose_name=None,
  name=None,
  primary_key=False,
  max_value=None,
  min_value=None,
  **options
)

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

Рассмотрим пример модели, использующей PositiveBigIntegerField для хранения различных данных:

pythonfrom 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

Пример . Создание и сохранение записи

Создадим экземпляр модели с большими положительными числами и сохраним его в базу данных:

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

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

python"5"

Пример . Получение и обновление значения

Получим запись и изменим значение поля PositiveBigIntegerField:

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

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

python"Stock: 2000"
"Views: 1015000"

Пример . Валидация значений

При попытке сохранить отрицательное или слишком большое значение поле выбрасывает исключение:

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

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

python"{'sku': ['Ensure this value is less than or equal to 9223372036854775807.'], 'stock_quantity': ['Ensure this value is greater than or equal to 0.']}"

Пример . Использование в формах

Поле PositiveBigIntegerField автоматически создает соответствующее поле формы, которое проверяет ввод пользователя:

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

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

python"2000000000002"

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

  • поле PositiveIntegerField,
    которое хранит целые положительные числа в меньшем диапазоне
  • поле BigIntegerField,
    которое хранит целые числа со знаком и поддерживает отрицательные значения
  • поле PositiveSmallIntegerField,
    которое хранит положительные целые числа малой разрядности
  • поле AutoField,
    которое автоматически генерирует возрастающие целочисленные значения