【问题标题】:How to extend django abstract base model by inheritance?如何通过继承扩展 django 抽象基模型?
【发布时间】:2015-05-12 08:05:16
【问题描述】:

我正在尝试通过继承扩展我的 django 抽象基础模型,但是 django 模型在抽象模型的任何子类上自动将 abstract = True 设置为 abstract = False 的行为让我很困扰。 p>

情况是这样的

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 的行为吗?

【问题讨论】:

  • 什么是 ModelMase(在 ModelBase 中更正,顺便说一句)?
  • @Pynchia 这是 django.db.models.Model 的元类

标签: python django inheritance


【解决方案1】:

是的,这是documented

如果孩子想扩展父母的 Meta 类,它可以继承它。

在你的情况下:

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

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 2018-03-07
    • 2013-12-22
    • 2015-02-27
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多