Pycharm - Django控制台中的自动加载模型

时间:2015-11-06 16:18:01

标签: python django django-models pycharm

有没有办法在pycharm django控制台中自动加载模型(与django-extensions shell_plus的工作方式类似)?

2 个答案:

答案 0 :(得分:8)

在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

答案 1 :(得分:1)

要扩展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下找到。