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)