为什么 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
我在 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