Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django儿童模型不';t继承元内部类_Django_Inheritance_Django Models - Fatal编程技术网

Django儿童模型不';t继承元内部类

Django儿童模型不';t继承元内部类,django,inheritance,django-models,Django,Inheritance,Django Models,我有两个Django 3.0模型,其中一个是另一个的子类: # models.py class BaseCategory(models.Model): class Meta: verbose_name_plural = "categories" class Category(BaseCategory): # fields 'n' stuff 只有类别型号在管理系统中注册 # admin.py @admin.register(Catego

我有两个Django 3.0模型,其中一个是另一个的子类:

# models.py
class BaseCategory(models.Model):

    class Meta:
        verbose_name_plural = "categories"

class Category(BaseCategory):

    # fields 'n' stuff
只有
类别
型号在管理系统中注册

# admin.py
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):

    # stuff here
在管理中,
Category
模型被标记为“categoris”,尽管它应该继承
Meta
内部类及其
verbose\u name\u复数
属性,从
BaseCategory
继承。事实上,如果我将相同的代码复制到
类别
模型中

# models.py
class Category(BaseCategory):

    class Meta:
        verbose_name_plural = "categories"

    # fields 'n' stuff
模型在管理中正确标记为“类别”。这表明
Category
类没有继承
BaseCategory
Meta
内部类

为什么子类不继承
Meta
内部类?有没有其他方法可以让我只指定一次
verbose\u name\u plural
,而不是将完全相同的代码复制到
BaseCategory
的每个子级中?

根据您需要声明
BaseCategory
模型抽象,以便继承其元类

class BaseCategory(models.Model):

    class Meta:
        abstract = True
        verbose_name_plural = "categories"
Category
类将自动继承
Meta
类,除了
abstract
属性

请注意,如果要对
类别
中的
类进行任何更改,则需要显式地将其子类化:

class Category(BaseCategory):

    class Meta(BaseCategory.Meta):
        ...

文档在哪里说对于非抽象类,
Meta
不是继承的?我找不到它。您链接到的部分说,
Meta
是作为抽象类的子类的属性提供的,但这与我正在做的事情无关。我将文档解释为,除非类是抽象的,否则Meta不会自动继承。我想您可以显式继承
类Meta(BaseCategory.Meta)
,而不必使类抽象。我从来没有这样试过。如果将
BaseCategory
抽象化,那么代码是否有效?默认的Python继承规则将使
Meta
继承,因此如果Django打破这一点,我希望得到一个与抽象类无关的事实的清晰声明。如果我能信任他们,至少他们能胜任地记录他们的代码。我不能把
BaseCategory
抽象化。