【问题标题】:Pycharm - autoload models in Django consolePycharm - 在 Django 控制台中自动加载模型
【发布时间】:2016-02-07 20:30:13
【问题描述】:

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

【问题讨论】:

    标签: python django django-models pycharm


    【解决方案1】:

    在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
    

    【讨论】:

      【解决方案2】:

      为了扩展 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 下可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-04
        • 2013-02-17
        • 2019-12-30
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-16
        相关资源
        最近更新 更多