Ответ
Абстрактная базовая модель в Django — это класс модели, который служит шаблоном для других моделей, но сам по себе не создаёт таблицу в базе данных. Его основная цель — следовать принципу DRY (Don't Repeat Yourself), вынося общие поля и методы в один переиспользуемый класс.
Чтобы сделать модель абстрактной, нужно установить abstract = True
в её внутреннем классе Meta
.
Когда это полезно?
Чаще всего абстрактные модели используют для добавления полей аудита, таких как дата создания и обновления, во все или многие модели проекта.
Пример:
from django.db import models
# Абстрактная модель с общими полями
class TimeStampedModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
updated_at = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
class Meta:
# Эта строка делает модель абстрактной
abstract = True
# Конкретные модели, которые наследуют общие поля
class Article(TimeStampedModel):
title = models.CharField(max_length=200)
content = models.TextField()
class Author(TimeStampedModel):
name = models.CharField(max_length=100)
Ключевые характеристики:
- Не создаёт таблицу в БД: Для
TimeStampedModel
не будет создано отдельной таблицы. - Поля добавляются к наследникам: В результате миграции таблица для
Article
будет содержать поляid
,created_at
,updated_at
,title
,content
. Аналогично дляAuthor
. - Упрощает поддержку: Изменение общей логики в одном месте (в абстрактной модели) автоматически применяется ко всем моделям-наследникам.