プロジェクトに抽象モデルがあります。これを使用して、具象サブクラスでデフォルトでフィールドを定義するだけでなく、そのフィールドをデフォルト以外のものとして動的に再定義できるようにします。これはすべて現在機能しています。
class classproperty(object):
"""
Decorator for making class properties
"""
def __init__(self, fget):
self.fget = fget
def __get__(self, owner_self, owner_cls):
return self.fget(owner_cls)
class BaseModel(models.Model):
class Meta(object):
abstract = True
@classproperty
def _special_attribute_field(self):
return getattr(self, '_bm_special_attribute_field', 'default')
@property
def bm_special_attribute(self):
return getattr(self, self._special_attribute_field)
...そして、後者の2つの関数を使用して、アクセスするフィールドを特定する一連のメソッドがあります。
問題は、現在、から継承するクラスは、デフォルト以外のものを指定するために使用しない場合でも、フィールドを明示的BaseModel
に定義する必要があることです。私がやりたいのは、具体的なサブモデルをプログラムで定義することです。これらのモデルが別のモデルに変更するために使用しない場合は、独自のフィールドを用意する必要があります。おそらくメタクラスを使用して、これを行う方法はありますか?重要なのは、Djangoの機械を台無しにしてはいけないということです。default
_bm_special_attribute_field
default
_bm_special_attribute_field