Django で抽象メソッドを定義した抽象 model を作成する方法について説明します。
meta – abstract
Django の model では以下のように abstract を設定することができます。
# models.py
from django.db import models
class BaseModel(models.Model)
class Meta:
abstract = True
abstract を設定した model は migrate にてテーブルが作成されなくなるなどの特徴があります。
抽象メソッド
一方で基本クラスに抽象メソッドを定義したい場合はがありますが、これは meta の設定ではできません。
Python では抽象化に abc を使いますが、これと meta のabstract は相性が良くないようでそのままでは実装することができません。
以下のように少し遠回りする形で実装します。
# models.py
from abs import ABCMeta, abstractmethod
from django.db import models
class AbstractModelMeta(ABCMeta, type(models.Model)):
pass
class BaseModel(models.Model, metaclass=AbstractModelMeta):
class Meta:
abstract = True
@classmethod
@abstractmethod
class from_domain(cls, obj: Entity):
"""抽象メソッド""""
...
参考
Attention Required! | Cloudflare