我仍在为我的控制面板应用程序研究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
抽象类的所有内容。
如何获取所有继承抽象基类的类?
答案 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,你必须适应其他版本。