Поле BigAutoField

Поле BigAutoField в Django представляет собой поле для автоматически инкрементируемого целого числа, которое используется в качестве первичного ключа. В отличие от AutoField, это поле поддерживает значительно больший диапазон значений (от 1 до 9 223 372 036 854 775 807), что делает его идеальным для приложений, которые могут превысить лимит стандартного 32-битного целого числа. Поле автоматически генерирует уникальное значение при создании новой записи, поэтому его не нужно указывать явно при вставке данных. Это поле является рекомендуемым выбором для первичного ключа в моделях, которые будут хранить большое количество записей.

При создании модели Django автоматически добавляет поле id с типом BigAutoField, если не указано другое поле первичного ключа. Вы также можете явно определить BigAutoField как первичный ключ, указав параметр primary_key=True. Это поле наследует все возможности стандартного автополя, включая автоматическое присвоение значений при сохранении объекта.

Синтаксис

pythonfield = models.BigAutoField(**options)

Параметры

Поле BigAutoField принимает следующие параметры:

pythonBigAutoField(
  verbose_name=None,  # Человекочитаемое имя поля
  primary_key=False,  # Делает поле первичным ключом
  editable=True,    # Можно ли редактировать поле
  help_text='',     # Текст подсказки для поля
  db_column=None,     # Имя колонки в БД
  default=None,     # Значение по умолчанию
  unique=False,     # Должно ли значение быть уникальным
  db_index=False,     # Создавать ли индекс
  blank=False,      # Может ли поле быть пустым
  null=False,       # Может ли поле хранить NULL
  unique_for_date=None, # Уникальность по дате
  unique_for_month=None,# Уникальность по месяцу
  unique_for_year=None, # Уникальность по году
)

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

Рассмотрим пример создания модели с явно указанным полем BigAutoField в качестве первичного ключа:

pythonfrom django.db import models

class Article(models.Model):
  id = models.BigAutoField(primary_key=True)
  title = models.CharField(max_length=200)
  content = models.TextField()
  created_at = models.DateTimeField(auto_now_add=True)

  def __str__(self):
    return self.title

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

При создании новой записи значение поля BigAutoField генерируется автоматически:

pythonfrom myapp.models import Article

# Создаем новую статью без указания id
article = Article.objects.create(
  title='First big article',
  content='This is a very long content...'
)

# Django автоматически присвоит уникальное значение id
print(f"Article ID: {article.id}")

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

python"Article ID: 1"

Пример . Получение последнего значения

Для получения последнего созданного значения можно использовать методы QuerySet:

pythonfrom myapp.models import Article

# Получаем последнюю созданную статью
last_article = Article.objects.latest('id')
print(f"Last article ID: {last_article.id}")

# Получаем максимальное значение id
max_id = Article.objects.aggregate(max_id=models.Max('id'))
print(f"Maximum ID: {max_id['max_id']}")

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

python"Last article ID: 1"
"Maximum ID: 1"

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

При создании миграций Django автоматически генерирует корректные SQL-запросы для создания колонки с типом BIGINT:

pythonfrom django.db import migrations, models

class Migration(migrations.Migration):
  dependencies = [
    ('myapp', '0001_initial'),
  ]

  operations = [
    migrations.CreateModel(
      name='Product',
      fields=[
        ('id', models.BigAutoField(primary_key=True)),
        ('name', models.CharField(max_length=100)),
        ('price', models.DecimalField(max_digits=10, decimal_places=2)),
      ],
    ),
  ]

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

  • поле AutoField,
    которое представляет 32-битное автоинкрементное поле
  • поле SmallAutoField,
    которое представляет 16-битное автоинкрементное поле
  • поле PositiveBigIntegerField,
    которое хранит положительные большие целые числа
  • поле BigIntegerField,
    которое хранит большие целые числа без автоинкремента