Django儿童模型不';t继承元内部类
我有两个Django 3.0模型,其中一个是另一个的子类: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
# 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
抽象化。