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
包含djangoMeta
类,Meta
类在SomeDjangoModels
中也可用吗?如果是,是否有办法证明它(该元类确实存在)?
thanx不,这两个定义并不完全相同 默认情况下,它不会继承
abstract=True
属性(因为常见的用例是子类不会是抽象的)
如果您确实希望继承该类,则必须显式重写该元类,如文档中所示。(从这个问题看来,您确实希望SomeDjangoModels
也是抽象的,但这并不完全清楚。)
如果您确实想要一个具体的(cf meta)子类,那么对于所有实际用途来说,定义都是相同的。是的,meta类是继承的 创建抽象基类时,Django会将您在基类中声明的任何元内部类作为属性提供。如果子类没有声明自己的元类,它将继承父类的元类。如果子级想要扩展父级的元类,它可以将其子类化 但在您的情况下,它不做任何事情,因为在继承子类上absrtact设置为False Django确实对抽象基类的元类进行了一次调整:在安装Meta属性之前,它将
abstract=False
因此,
SomeModels
将是抽象的,但somedjangmodels
不会。您试图解决的问题是什么?元类是否仍然存在于组合对象中?还有一种方法知道它是否仍然存在?每个模型类都有元类,请检查此处: