2

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

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字段,即使它们不_bm_special_attribute_field用于指定默认值以外的其他内容。我想做的是以编程方式定义default具体子模型,前提这些模型不用于_bm_special_attribute_field将其更改为其他东西,在这种情况下,它们应该带来自己的字段。有没有办法做到这一点,也许是元类?关键是它不能破坏 Django 机器。

4

0 回答 0