这里有一些新手问题,我有一个这样的模型:
from django.db import models
class SomeCommons(object):
# some fields here
# ...
class Meta:
abstract=True
class SomeDjangoModels(SomeCommons,models.Model):
pass
与以下型号相同:
from django.db import models
class SomeModels(models.Model):
# some fields here
# ...
class Meta:
abstract=True
据我所知,SomeDjangoModels(SomeCommons,models.Model)
SomeCommons
SomeDjangoModels
中的SomeCommons
属性将在Meta
中提供,但如果Meta
包含django,则问题为 SomeDjangoModels
课程{{1}}课程也会在{{1}}中提供吗?如果是,有没有办法证明它(Meta类确实存在)?
感谢名单
答案 0 :(得分:0)
是的,元类是继承的......
当创建抽象基类时,Django使您在基类中声明的任何Meta内部类可用作属性。如果子类没有声明它自己的Meta类,它将继承父类的Meta。如果孩子想要扩展父类的Meta类,它可以将其子类化。
但是在你的情况下它没有做任何事,因为继承子类的absrtact被设置为False。
Django确实对抽象基类的Meta类进行了一次调整:在安装Meta属性之前,它设置了
abstract=False
。
结果SomeModels
将是抽象的,但SomeDjangoModels
不会。
答案 1 :(得分:-1)
不,这两个定义并不完全相同。
默认情况下为a subclass will inherit its parent's Meta
,但不会继承abstract=True
属性(因为常见的用例是子类不是抽象的)。
如果您希望继承它,则必须显式覆盖元类,如文档中所示。 (问题似乎是你确实希望SomeDjangoModels
也是抽象的,但它并不完全清楚。)
如果你想要一个具体的(cf meta)子类,那么出于所有实际目的,这些定义是相同的。