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

Атрибут abstract

Атрибут abstract указывается внутри класса Meta модели Django. Когда он установлен в True, модель становится абстрактной. Это означает, что для неё не создаётся отдельная таблица в базе данных. Вместо этого она служит базовым классом, поля и методы которого наследуются дочерними моделями. Это полезно для устранения дублирования кода при наличии общих полей (например, временных меток) в нескольких моделях.

Синтаксис

from django.db import models class BaseModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True

Пример

Объявим абстрактную модель с общими полями и унаследуем от неё две конкретные модели:

from django.db import models # Абстрактная модель-основа class TimestampMixin(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True # Конкретные модели class Article(TimestampMixin): title = models.CharField(max_length=100) content = models.TextField() class Comment(TimestampMixin): article = models.ForeignKey(Article, on_delete=models.CASCADE) text = models.CharField(max_length=255)

При выполнении миграций для модели Article будут созданы поля created_at и updated_at, но отдельной таблицы для TimestampMixin не существует. Убедимся в этом, проверив атрибуты экземпляра:

from myapp.models import Article article = Article(title="About abstract", content="Content text") article.save() print(article.created_at) print(article.updated_at)

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

"2026-09-05 12:00:00+00:00" "2026-09-05 12:00:00+00:00"

Пример

Абстрактная модель может содержать не только поля, но и методы. Например, добавим метод для форматированного вывода даты:

from django.db import models class BaseModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) class Meta: abstract = True def get_created_date(self): return self.created_at.date() class Post(BaseModel): title = models.CharField(max_length=100) body = models.TextField()

Теперь у модели Post доступен метод get_created_date, унаследованный от абстрактной модели:

from myapp.models import Post post = Post(title="First post", body="Hello, world!") post.save() res = post.get_created_date() print(res)

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

"2026-09-05"

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

  • атрибут db_table,
    который задаёт имя таблицы в базе данных для модели
  • атрибут ordering,
    который определяет сортировку записей по умолчанию
  • атрибут verbose_name,
    который задаёт читаемое имя модели в единственном числе
  • атрибут verbose_name_plural,
    который задаёт читаемое имя модели во множественном числе
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить