В Django можно создать общую абстрактную модель (англ. abstract model) в любом файле models.py в пакете приложения, но рекомендуется создавать ее в отдельном файле для лучшей структурированности и удобства обслуживания проекта.
Для создания абстрактной модели необходимо импортировать базовый класс models.Model из модуля django.db.models и использовать декоратор @abstractmethod из модуля abc для определения абстрактных методов.
Пример:
from abc import ABC, abstractmethod from django.db import models class CommonModel(ABC, models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True @abstractmethod def some_method(self): pass
В приведенном примере класс CommonModel является абстрактным, так как имеет метакласс abstract=True внутри класса Meta. Его абстрактный метод some_method также может быть определен здесь или в производных классах.
Определение абстрактных моделей позволяет определить общую функциональность и поля для нескольких моделей в Django проекте. Примерами общих полей могут быть поля, отслеживающие дату и время создания и обновления записи.
Абстрактные модели могут использоваться в качестве базового класса для других моделей, которые будут наследовать их функциональность и поля.
Производные классы от абстрактной модели могут добавлять дополнительные поля и методы, а также переопределять абстрактные методы по необходимости.
Пример использования абстрактной модели:
from django.db import models class MyModel(CommonModel): # Наследование от абстрактной модели some_field = models.CharField(max_length=100) def some_method(self): # Реализация абстрактного метода pass
В данном случае модель MyModel наследуется от абстрактной модели CommonModel и добавляет собственное поле some_field. Кроме того, она реализует абстрактный метод some_method.
Таким образом, создание общей абстрактной модели в Django позволяет упростить код и избежать повторения кода за счет вынесения общей функциональности и полей в отдельный базовый класс.