Что такое абстрактные модели в Django и для чего они используются

Ответ

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