Поле BigAutoField
Поле BigAutoField в Django представляет собой поле для автоматически инкрементируемого целого числа, которое используется в качестве первичного ключа. В отличие от AutoField, это поле поддерживает значительно больший диапазон значений (от 1 до 9 223 372 036 854 775 807), что делает его идеальным для приложений, которые могут превысить лимит стандартного 32-битного целого числа. Поле автоматически генерирует уникальное значение при создании новой записи, поэтому его не нужно указывать явно при вставке данных. Это поле является рекомендуемым выбором для первичного ключа в моделях, которые будут хранить большое количество записей.
При создании модели Django автоматически добавляет поле id с типом BigAutoField, если не указано другое поле первичного ключа. Вы также можете явно определить BigAutoField как первичный ключ, указав параметр primary_key=True. Это поле наследует все возможности стандартного автополя, включая автоматическое присвоение значений при сохранении объекта.
Синтаксис
field = models.BigAutoField(**options)
Параметры
Поле BigAutoField принимает следующие параметры:
BigAutoField(
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 в качестве первичного ключа:
from 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 генерируется автоматически:
from 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}")
Результат выполнения кода:
"Article ID: 1"
Пример . Получение последнего значения
Для получения последнего созданного значения можно использовать методы QuerySet:
from 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']}")
Результат выполнения кода:
"Last article ID: 1"
"Maximum ID: 1"
Пример . Использование в миграциях
При создании миграций Django автоматически генерирует корректные SQL-запросы для создания колонки с типом BIGINT:
from 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,
которое хранит большие целые числа без автоинкремента