[英]combining object with Meta and django models.Model
这里有一些新手问题,我有一个像这样的模型:
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
包含django Meta
类, Meta
类是否也会在SomeDjangoModels
可用? 如果是,是否有办法证明它(Meta类确实存在)?
谢谢
是的,元类是继承的...
创建抽象基类后,Django会将您在基类中声明的任何Meta内部类用作属性。 如果子类没有声明自己的Meta类,它将继承父类的Meta。 如果孩子想扩展父母的Meta类,则可以对其进行子类化。
但是在您的情况下,它没有任何作用,因为在继承的子类上,absrtact设置为False。
Django确实对抽象基类的Meta类进行了一种调整:在安装Meta属性之前,它会设置
abstract=False
。
结果, SomeModels
将是抽象的,但SomeDjangoModels
将不是抽象的。
不,这两个定义并不完全相同。
默认情况下, 子类将继承其父级的Meta
,但不会继承abstract=True
属性(因为常见的用例是子类将不是抽象的)。
如果您希望继承该类,则必须显式重写meta类,如文档所示。 (从这个问题看来,您确实希望SomeDjangoModels
也可以是抽象的,但是还不完全清楚。)
如果确实需要具体的(cf meta)子类,则出于所有实际目的,定义是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.