Ответ
Абстрактная модель в Django — это базовый класс модели, который не создает собственную таблицу в базе данных, а служит шаблоном для других моделей.
Основная цель — вынести общие поля и методы в один родительский класс, чтобы избежать дублирования кода (принцип DRY — Don't Repeat Yourself).
Ключевые особенности:
- Для объявления модели как абстрактной используется
abstract = True
во вложенном классеMeta
. - Наследующие модели получают все поля и методы родительской абстрактной модели.
- Это удобный способ для добавления полей аудита (например,
created_at
,updated_at
) или общей логики во множество моделей.
Пример:
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):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
В этом примере модели Article
и Author
автоматически получат поля created_at
и updated_at
, но в базе данных будет создана только таблица для Article
и Author
, а не для TimeStampedModel
.