【发布时间】:2016-02-07 20:30:13
【问题描述】:
有没有办法在 pycharm django 控制台中自动加载模型(类似于 django-extensions shell_plus 的工作方式)?
【问题讨论】:
标签: python django django-models pycharm
有没有办法在 pycharm django 控制台中自动加载模型(类似于 django-extensions shell_plus 的工作方式)?
【问题讨论】:
标签: python django django-models pycharm
在pycharm设置,django控制台设置中可以有一个启动脚本:
这将自动加载 django 模型,例如 shell_plus:
import sys
import django
django.setup()
from django.apps import apps
for _class in apps.get_models():
globals()[_class.__name__] = _class
【讨论】:
为了扩展 Yunti 的回答,如果您希望模型在“模型”模块中命名空间,您可以在运行脚本中即时创建一个模块并将所有模型添加到其中:
import sys
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
import django
django.setup()
import types
from django.apps import apps
models = types.ModuleType('models')
for _class in apps.get_models():
setattr(ext_models, _class.__name__, _class)
更进一步,如果您正在开发特定的 django 应用程序并希望外部模型位于与应用程序模型不同的命名空间中,您可以进一步扩展:
import sys
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
import django
django.setup()
import types
from django.apps import apps
from your_project.your_app import models as your_models # and views and tests and all the modules you want to import :)
ext_models = types.ModuleType('ext_models')
for _class in apps.get_models():
_class_name = _class.__name__
if not hasattr(your_models, _class_name):
setattr(ext_models, _class_name, _class)
现在,您的所有模型都在 your_models 下可用。并且所有外部模型(如 AccessToken、Group 等)都在 ext_models 下可用。
【讨论】: