Sobes.tech
Junior — Middle
70

Можно ли расширять функциональность модели в Django ORM через наследование?

Answer from AI

sobes.tech AI

Да, в Django ORM можно расширять модели через наследование. Существует несколько типов наследования:

  • Абстрактные базовые классы: создаёте базовую модель с abstract = True в мета-классе, от которой наследуют другие модели. Поля базового класса добавляются в дочерние таблицы.

  • Многоуровневое наследование (multi-table inheritance): каждая модель создаёт свою таблицу, а дочерняя ссылается на родительскую через OneToOneField. Позволяет расширять модель, сохраняя связь с базовой.

  • Прокси-модели: не создают новую таблицу, а изменяют поведение существующей модели.

Пример абстрактного класса:

from django.db import models

class TimestampedModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Article(TimestampedModel):
    title = models.CharField(max_length=100)
    content = models.TextField()

Здесь Article наследует поля времени создания и обновления из TimestampedModel.