Pycharm - 在 Django 控制台中自动加载模型
Pycharm - autoload models in Django console
有没有办法在 pycharm django 控制台中自动加载模型(类似于 django-extensions shell_plus 的工作方式)?
在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 的答案,如果您希望模型在 'models' 模块中命名空间,您可以在 运行 脚本中即时创建一个模块并将所有模型添加到它:
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 下使用。 ext_models.
下提供所有外部模型(如 AccessToken、Group 等)
有没有办法在 pycharm django 控制台中自动加载模型(类似于 django-extensions shell_plus 的工作方式)?
在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 的答案,如果您希望模型在 'models' 模块中命名空间,您可以在 运行 脚本中即时创建一个模块并将所有模型添加到它:
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 下使用。 ext_models.
下提供所有外部模型(如 AccessToken、Group 等)