繁体   English   中英

将对象与Meta和django模型组合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM