如何在Django 1.8中获取所有的模型

19

我在我的 admin.py 中使用了这段代码。

from django.db.models import get_models, get_app

for model in get_models(get_app('myapp')):
    admin.site.register(model)

但我收到警告说get_models已经过时

在Django 1.8中,我该怎么做呢?


这是一个警告。它是否在积极“禁止”您获取模型结果?我不会期望一个警告除了通知您这种方法将在未来的Django版本中消失之外还会做什么。 - Makoto
3
@Makoto说,这个会在1.9版中被移除。我认为最好使用最新的东西,而不是在几个月后再次更改。 - user3214546
这是一个完全合理的迁移原因;然而,你的问题表述方式让人觉得你在从该命令中获取值时遇到了麻烦。我的担忧是它会阻止你获取任何信息,这将是违反直觉的。 - Makoto
1个回答

39

这应该能够工作,

from django.apps import apps
apps.get_models()

get_models方法返回所有已安装模型的列表。你也可以传递三个关键字参数include_auto_createdinclude_deferredinclude_swapped

如果你想要获取特定应用的模型,可以使用以下方式。

from django.apps import apps
myapp = apps.get_app_config('myapp')
myapp.models

这将返回该应用程序模型的OrderedDict实例。


我尝试像这样注册管理员站点 admin.site.register(myapp.models[0]),但是我得到了 'str' object has no attribute '_meta' 的错误提示。 - user3214546
1
这是因为它返回一个 OrderedDict 实例。你需要调用 myapp.models.values() - Rod Xavier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接