有没有办法让我配置PyCharm来运行shell_plus而不是默认的shell?
我已经尝试将manage命令的文本放在'Starting script'中,但后来我得到了以下内容 django_manage_shell.run( “/用户/ cmason / counsyl /代码/网站/ counsyl /产品”) 进口口 import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
# The new Django 1.4 default manage.py wants "from django..." before
# importing settings, but we usually tinker with sys.path in
# settings_local.py, which is called from settings.py. Importing
# settings.py works but does mean some double importing. Luckily that
# module does very little work.
import settings
# appease pyflakes; don't ever do this in
# non-super-meta-namespace-trickery code
settings
from django.core.management import execute_from_command_line
execute_from_command_line("shellplus")
它并没有真正运行shell_plus。
似乎除了启动“启动脚本”而不是默认值之外。
Shell_plus会自动导入所有Django模型类。
答案 0 :(得分:4)
我一直在寻找解决同一问题的方法,最终我到了这里。我尝试了其他人提出的解决方案,但似乎没有一个解决方案。因此,我决定寻找另一种解决方案。这是我想出的:
这是PyCharm 2019.2.3的原始Django控制台启动脚本:
import sys, django
print('Python %s on %s' % (sys.version, sys.platform))
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django):
django.setup()
import django_manage_shell
django_manage_shell.run(PROJECT_ROOT)
按如下所示更改最后两行将以最适当的方式完成它。
from IPython.core.getipython import get_ipython
ipython = get_ipython()
from django_extensions.management.notebook_extension import load_ipython_extension
load_ipython_extension(ipython)
要使其起作用:打开PyCharm设置( CTRL + S ),然后转到 Django Console 部分。然后在启动脚本窗口中进行更改,然后应用。最后,启动新的 Python控制台实例。
答案 1 :(得分:2)
这不是一个完整的答案,但我发现this script至少会加载所有应用模型。把它放在设置>控制台> Django控制台>启动脚本:
import sys
import logging
logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
log = logging.getLogger("root")
from django.db.models import get_models
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
logging.config.dictConfig(settings.LOGGING)
log.debug("Logging has been initialized at DEBUG")
log.setLevel( logging.DEBUG)
log.disabled = False
for _class in get_models():
if _class.__name__.startswith("Historical"): continue
log.debug("Registering model {}".format(_class.__name__))
globals()[_class.__name__] = _class
def debug_sql():
from debug_toolbar.management.commands import debugsqlshell
return
答案 2 :(得分:2)
我查看了shell_plus
的源代码,发现您可以在名为Command
的{{1}}类上使用一种方法
在PyCharm中,转到:构建,执行,部署>控制台> Django控制台>启动脚本
将此添加到该框中的现有代码中:
get_imported_objects({})
答案 3 :(得分:1)
在Django 1.7中,以下脚本可用作PyCharm 3.4的解决方法:
档案 - >设置 - >控制台 - > Django Console和manage.py选项
在Starting script
中,输入:
import sys
import django
django.setup()
from django.db.models import get_models
for _class in get_models():
globals()[_class.__name__] = _class
答案 4 :(得分:1)
通过连接到shell_plus代码,我可以自动加载模型对象。我将此附加到了Preferences > Build, Execution, Deployment > Console > Django Console
中的默认启动脚本中:
from django_extensions.management import shells
from django.core.management.color import color_style
imported_items = shells.import_objects({}, color_style())
for k, v in imported_items.items():
globals()[k] = v
这是在PyCharm 2018.3.3 Pro上
为完整起见,这是启动脚本的全部内容:
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)
from django_extensions.management import shells
from django.core.management.color import color_style
imported_items = shells.import_objects({}, color_style())
for k, v in imported_items.items():
globals()[k] = v
答案 5 :(得分:1)
解决此问题的一种方法是创建一个新的Python运行配置。将目标设置为模块,然后选择项目的manage.py
文件。然后将shell_plus
放在“参数”字段中。将工作目录设置为项目目录。最后,将执行设置为Run with Python Console
。应用更改,然后运行新配置。
答案 6 :(得分:0)
由于django.db.models.get_models
不再存在,因此这里的更新版本将与Christopher Mason的版本相同。
import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
import logging
logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
log = logging.getLogger("root")
from django.apps import apps
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
logging.config.dictConfig(settings.LOGGING)
log.debug("Logging has been initialized at DEBUG")
log.setLevel( logging.DEBUG)
log.disabled = False
for _configs in apps.get_app_configs():
for _class in _configs.get_models():
if _class.__name__.startswith("Historical"): continue
log.debug("Registering model {}".format(_class.__name__))
globals()[_class.__name__] = apps.get_model(_configs.label, _class.__name__)
def debug_sql():
from debug_toolbar.management.commands import debugsqlshell
return
答案 7 :(得分:0)