抽象模型中的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的机器