访问django中抽象基类的所有子项?

时间:2018-03-14 18:46:33

标签: python django django-models abstract-class

我仍在为我的控制面板应用程序研究whether to use abstract base classes or proxy models。我现在正在看抽象基类。

假设我有几个这样的模型:

class App(models.Model):
    name = CharField(max_length=100)

    class Meta:
        abstract = True

class CMSMonitorApp(App):
    alerts = PositiveIntegerField()

class PasswordResetApp(App):
    login = CharField(max_length=100)
    token = CharField(max_length=100)

在控制面板的主页面上,我想为我的用户显示所有可用的应用程序。一个简单的方法是获取继承App抽象类的所有内容。

如何获取所有继承抽象基类的类?

1 个答案:

答案 0 :(得分:1)

假设您的django应用程序名为myapp,这是一个返回所有继承抽象基类的类的函数:

from django.apps import apps
def get_subclasses(abstract_class):
   result = []
   for model in apps.get_app_config('myapp').get_models():
      if issubclass(model, abstract_class) and model is not abstract_class:
           result.append(model)
   return result

这适用于django 1.11,你必须适应其他版本。