为什么django.db.models.get_models()不返回任何抽象模型?

时间:2013-11-27 06:43:49

标签: django django-models

django.db.models.get_apps()返回包含模型的所有已安装模块的列表,无论它们是具体的还是抽象的:

[<module 'apputils.models' from '/Users/Aaron/Sites/app/apputils/models.py'>,
 <module 'users.models' from '/Users/Aaron/Sites/app/users/models.py'>,
 <module 'profiles.models' from '/Users/Aaron/Sites/app/profiles/models.py'>]

但由于某种原因,django.db.models.get_models()只返回具体模型,而不是抽象模型(注意apputils.models没有任何模型):

[<class 'users.models.User'>,
 <class 'profiles.models.Profile'>,
 <class 'profiles.models.EditorProfile'>,
 <class 'profiles.models.AuthorProfile'>]

这是一个错误吗?如果它不是一个bug,那么我是否可以通过某种方式包含我的抽象模型?

1 个答案:

答案 0 :(得分:2)

我不认为这是一个错误。对于内部django用例来说,明确地列出抽象模型并不是很有用。

一个选择是说服django核心开发者添加这个功能(因为用例,你真的没有太大的机会..)

第二个选项是像这样自己遍历模型(它从app myapp获取模型):

import inspect
from django.db.models import Model, get_app

is_modelclass = lambda c: inspect.isclass(c) and issubclass(c, Model)
inspect.getmembers(get_app('myapp'), is_modelclass)