Django - 如何确定模型类是否是抽象的

时间:2009-11-20 19:52:01

标签: django django-models

如果django模型是抽象的,如下所示,有没有办法检查类以确定它是抽象的?

class MyModel(models.Model):
  class Meta:
    abstract = True

我希望我可以检查MyModel.Meta.abstract,但根据Django文档:

  

Django确实对抽象基类的Meta类进行了一次调整:在安装Meta属性之前,设置abstract = False 。这意味着抽象基类的子项本身不会自动成为抽象类。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:13)

您可以实例化MyModel,然后检查._meta.abstract。

所以在代码中:

m = MyModel()
print m._meta.abstract

答案 1 :(得分:2)

我想指出你不需要实例化一个模型来检查它是否是抽象的 - Django模型继承了一个在类实例化时添加_meta的实际元类。

因此,与@ sheats的代码类似,请尝试

from django.db.models import Model
class MyModel(Model):
  pass
print MyModel._meta.abstract

或者,对于一个积极的例子

from django.db.models import Model
class MyModel(Model):
  class Meta(object):
    abstract = True
print MyModel._meta.abstract

当然,这也适用于内置模型和从Django模型继承的任何内容。

from django.contrib.auth.models import User
print User._meta.abstract