Ответ
Абстрактная модель в 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.