Python 将对象与Meta和django模型相结合

Python 将对象与Meta和django模型相结合,python,django,Python,Django,这里有一些新手问题,我有一个这样的模型: 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

这里有一些新手问题,我有一个这样的模型:

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
我所知道的是,这样做时,
somedjangmodels(SomeCommons,models.Model)
SomeCommons中的属性将在
somedjangmodels
中可用,但是问题是如果
SomeCommons
包含django
Meta
类,
Meta
类在
SomeDjangoModels
中也可用吗?如果是,是否有办法证明它(该元类确实存在)?


thanx不,这两个定义并不完全相同

默认情况下,它不会继承
abstract=True
属性(因为常见的用例是子类不会是抽象的)

如果您确实希望继承该类,则必须显式重写该元类,如文档中所示。(从这个问题看来,您确实希望
SomeDjangoModels
也是抽象的,但这并不完全清楚。)


如果您确实想要一个具体的(cf meta)子类,那么对于所有实际用途来说,定义都是相同的。

是的,meta类是继承的

创建抽象基类时,Django会将您在基类中声明的任何元内部类作为属性提供。如果子类没有声明自己的元类,它将继承父类的元类。如果子级想要扩展父级的元类,它可以将其子类化

但在您的情况下,它不做任何事情,因为在继承子类上absrtact设置为False

Django确实对抽象基类的元类进行了一次调整:在安装Meta属性之前,它将
abstract=False


因此,
SomeModels
将是抽象的,但
somedjangmodels
不会。

您试图解决的问题是什么?元类是否仍然存在于组合对象中?还有一种方法知道它是否仍然存在?每个模型类都有元类,请检查此处: