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

Python Pycharm-Django控制台中的自动加载模型,python,django,django-models,pycharm,Python,Django,Django Models,Pycharm,有没有办法在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()

有没有办法在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的答案,如果您希望模型在“模型”模块中具有名称空间,您可以在运行脚本中动态创建一个模块,并将所有模型添加到其中:

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)
现在,您的所有型号都可以在您的_型号下使用。所有外部型号(如AccessToken、Group和c)都可以在ext_型号下使用