1

我在 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 模型的元类中继承一个字段时,该字段会出现在子元类中,但此规则不适用于abstract=True.

我知道如果发生这种情况,将不会在数据库中创建任何表,但我不知道这种继承是如何没有发生的。请为我解释这个过程。

4

2 回答 2

4

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

它已被描述here

于 2020-02-15T11:29:07.930 回答
4

模型元类在模型的元类中重置abstract。在文档中,您可以看到:

Django 确实对抽象基类的 Meta 类做了一个调整:在安装 Meta 属性之前,它设置 abstract=False。这意味着抽象基类的子类本身不会自动成为抽象类。

此外,您可以在此链接中查看此过程的源代码:

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
于 2020-02-15T11:32:03.273 回答