python - 访问 django 中抽象基类的所有子级?

标签 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 抽象类的所有内容。

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

最佳答案

假设您的 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,您可能必须将其适应其他版本。

关于python - 访问 django 中抽象基类的所有子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49285546/

相关文章:

jquery - 发送 POST 数据和访问模型时,Django 会生成空白页面

javascript - jquery自动完成功能不适用于克隆行动态表单集django

Django左连接m2m字段

python - 创建一个 Python Pickle 支持的网站有什么问题吗?

python - 使用 Python 匹配 Stata 加权 xtile 命令的 final方法?

python - Django:Cookie 设置为 30 秒后过期实际上是 30 分钟后过期?

字段的 Django 多级选择

python - 来回 Linspace 生成器

python - 比较 Dataframe 中具有不一致类型值的列

mysql - Django 1.8 中的复杂注释