为什么 Abstract=True 不在 django 模型的 Meta class 中继承

Why Abstract=True dosen't inherit in Meta class of django model

我在 django 中有这个模型:

class FotherModel(models.Model):
    # Some fields goes here! 
    class Meta: 
        # Some fields goes here! 
        abstract = True 
class ChildModel(FotherModel):
    # Some fields goes here! 
    class Meta(FotherModel.Meta):
        #s Some fields goes here! 

当我们从 Django 模型的元 class 中继承一个字段时,该字段出现在子元中 class,但是这个规则不适用于 abstract=True.

我知道如果发生这种情况,不会在数据库中创建table,但我不知道这种继承是怎么发生的。请解释这个过程对我来说。

由于meta部分的一些字段的概念和作用,在很多情况下,该字段被孩子继承是没有意义的。

已描述here

模型元class 重置了模型元class 中的abstract。在 this 文档中您可以看到:

Django does make one adjustment to the Meta class of an abstract base class: before installing the Meta attribute, it sets abstract=False. This means that children of abstract base classes don’t automatically become abstract classes themselves.

另外,你可以在这个link看到这个过程的源代码:

if abstract:
    # Abstract base models can't be instantiated and don't appear in
    # the list of models for an app. We do the final setup for them a
    # little differently from normal models.
    attr_meta.abstract = False
    new_class.Meta = attr_meta
    return new_class