Python 如何在脚本中导入所有django模型和更多模型?

Python 如何在脚本中导入所有django模型和更多模型?,python,django,Python,Django,我已将以下代码放在脚本文件的顶部 os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'momsite.conf.local.settings') django.setup() 现在我可以导入我的django应用程序并运行小片段(主要用于测试东西) 我想导入通过设置注册的所有型号。已安装的应用程序 我知道在运行manage.py shell\u plus时会这样做,它会自动导入所有模型和更多 我在看他们的代码。我不知道我是否能理解它 目前,我正

我已将以下代码放在脚本文件的顶部

 os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'momsite.conf.local.settings')
 django.setup()

现在我可以导入我的django应用程序并运行小片段(主要用于测试东西)


我想导入通过
设置注册的所有型号。已安装的应用程序

我知道在运行
manage.py shell\u plus
时会这样做,它会自动导入所有模型和更多

我在看他们的代码。我不知道我是否能理解它

目前,我正在做以下工作,我认为这是在导入模型,但在脚本中却不可用

 from django_extensions.management.shells import import_objects
 from django.core.management.base import BaseCommand, CommandError

 options = {}
 style = BaseCommand().style
 import_objects(options, style)
  • 编辑。。采纳dirkgroten的答复
import_对象
从importlib import_模块内部调用
显然,我们需要用导入的类填充globals()

 options = {'quiet_load': True}
 style = BaseCommand().style

 imported_objects = import_objects(options, style)
 globals().update(imported_objects)

运行
django.setup()
后,执行以下操作:

from django.apps import apps
for _class in apps.get_models():
    if _class.__name__.startswith("Historical"): 
        continue
    globals()[_class.__name__] = _class

这将使所有模型类在脚本中都可以作为全局变量使用。

创建一个
管理
命令。它将自动加载django()和所有内容。 然后在命令中,您只需启动命令
/manage.py mytest

#myapp/management/commands/mytest.py
from django.core.management.base import BaseCommand, CommandError
from myapp.sometest import Mycommand

class Command(BaseCommand):
    help = 'my test script'

    def add_arguments(self, parser):
        pass
        # parser.add_argument('poll_ids', nargs='+', type=int)

    def handle(self, *args, **options):
        Mycommand.something(self)
这将调用实际脚本:

#sometest.py
from .models import *
class Mycommand():
   def something(self):
       print('...something')

“现在我可以导入我的django应用程序并运行小片段(主要是测试内容)”=>请注意,你真的不需要所有这些开销,cf“我想导入通过设置注册的所有模型。已安装的应用程序”=>看起来你想要的部分就在这里-周围的一切都是非常普遍的(并且过于复杂的IMHO)尝试处理各种可能情况的东西。我已经设法导入了,但问题是它没有导入…:(@Brunodesshuilliers)