抽象模型中的Django条件定义模型字段

抽象模型中的Django条件定义模型字段,django,django-models,django-orm,Django,Django Models,Django Orm,我的项目中有一个抽象模型,我想用它在具体子类上默认定义一个字段,但也允许将该字段动态地重新定义为默认字段以外的其他字段。所有这些现在都起作用了: class classproperty(object): """ Decorator for making class properties """ def __init__(self, fget): self.fget = fget def __get__(self, owner_self,

我的项目中有一个抽象模型,我想用它在具体子类上默认定义一个字段,但也允许将该字段动态地重新定义为默认字段以外的其他字段。所有这些现在都起作用了:

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)
…然后有一系列方法使用后两个函数来确定要访问哪个字段

现在的问题是,从
BaseModel
继承的类必须明确定义
default
字段,即使它们不使用
\u bm\u special\u attribute\u field
来指定默认字段以外的内容。我想做的是,仅当那些模型不使用
\u bm\u special\u attribute\u field
将其更改为其他内容时,才以编程方式在具体的子模型上定义
default
,在这种情况下,它们应该使用自己的字段。有没有办法做到这一点,也许是用元类?关键是它不能弄脏Django的机器