如何通过继承扩展django抽象基础模型?

时间:2015-05-12 08:05:17

标签: python django inheritance

我试图通过继承扩展我的django 抽象基础模型,但django模型的行为会自动将abstract = True设置为abstract = False抽象模型的子类困扰着我。

所以情况是

from django.db.models import Model
from django.db.models.base import ModelBase

Class TimeStampedModel(Model):
    created_time = DateTimeField()
    modified_time = DateTimeField()

    class Meta:
        abstract = True
        ordering = ('created_time',)
        get_latest_by = 'created_time'


class RecordModelMetaClass(ModelBase):
    # NOT IMPLEMENTED YET
    pass


class RecordModel(TimeStampedModel):
    __metaclass__ = RecordModelMetaClass

    recording_model = NotImplemented
    recording_fields = NotImplemented

抽象TimeStampedModel是抽象RecordModel的基础模型。

问题是 Django 的元类ModelBase会在导入时定义RecordModel时自动将RecordModel的abstract = True转换为abstract = False时间。

有没有办法关掉这个django的行为?

1 个答案:

答案 0 :(得分:4)

是的,这是documented

  

如果孩子想要扩展父类的Meta类,它可以将其子类化。

在你的情况下:

class RecordModel(TimeStampedModel):
    class Meta(TimestampedModel.Meta):
        abstract = True