РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
26 of 818 menu

Поле AutoField

Поле AutoField представляет собой целочисленное поле, значение которого автоматически увеличивается при добавлении новой записи в базу данных. Оно чаще всего используется в качестве первичного ключа модели, хотя не является обязательным, если вы явно указываете другое поле. По умолчанию Django автоматически добавляет поле с типом BigAutoField, начиная с версии 3.2, однако в более старых проектах часто используется AutoField, поэтому понимание его работы необходимо для поддержки существующего кода.

При определении поля в модели конструктор принимает стандартные параметры, такие как primary_key, verbose_name, db_column и другие. Если поле не указано как первичный ключ, Django автоматически создаст скрытое поле id, но если вы установите primary_key=True для любого поля, то автоматическое поле не будет создано.

Синтаксис

from django.db import models class YourModel(models.Model): id = models.AutoField(primary_key=True)

Пример

Рассмотрим простейшую модель категории, где поле id является первичным ключом с автоматическим приращением:

from django.db import models class Category(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=100) def __str__(self): return self.name

Теперь создадим несколько категорий и посмотрим, как назначаются значения поля id:

from myapp.models import Category cat1 = Category.objects.create(name="Technology") cat2 = Category.objects.create(name="Science") cat3 = Category.objects.create(name="Art") for cat in Category.objects.all(): print(f"{cat.id}: {cat.name}")

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

"1: Technology" "2: Science" "3: Art"

Пример

Если вы не используете явно поле AutoField, Django все равно создаст неявное поле с именем id для хранения первичного ключа. Рассмотрим модель статьи без явного указания первичного ключа:

from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() def __str__(self): return self.title

В данном случае Django автоматически добавит поле id типа AutoField. Вы можете обращаться к нему как к обычному полю:

from myapp.models import Article article = Article.objects.create( title="Django Basics", content="An introduction to Django." ) print(article.id) print(article.pk)

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

"1" "1"

Пример

Поле AutoField можно использовать в качестве внешнего ключа. Рассмотрим модель комментария, которая ссылается на статью:

from django.db import models class Article(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=200) class Comment(models.Model): id = models.AutoField(primary_key=True) article = models.ForeignKey(Article, on_delete=models.CASCADE) text = models.TextField()

Теперь создадим статью и несколько комментариев к ней:

from myapp.models import Article, Comment article = Article.objects.create(title="Web Development") Comment.objects.create(article=article, text="Great article!") Comment.objects.create(article=article, text="Very useful.") for comment in Comment.objects.all(): print(f"Comment {comment.id} for article {comment.article.id}")

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

"Comment 1 for article 1" "Comment 2 for article 1"

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

  • поле BigAutoField,
    которое использует 64-битное целое число для хранения значений
  • поле SmallAutoField,
    которое использует 16-битное целое число для хранения значений
  • поле IntegerField,
    которое хранит целые числа без автоматического приращения
  • атрибут pk,
    который возвращает значение первичного ключа модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить