当前位置: 首页 > 知识库问答 >
问题:

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

钮誉
2023-03-14

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

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

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

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

我知道https://github.com/django-extensions/django-extensions运行manage时执行此操作。py shell_plus它会自动导入所有型号和更多型号。

我在看他们的代码。不确定我是否能理解。

https://github.com/django-extensions/django-extensions/blob/3355332238910f3f30a3921e604641562c79a0a8/django_extensions/management/commands/shell_plus.py#L137

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

 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_objects在内部调用从导入import_module显然,我们需要填充全局()与导入类

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

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

共有2个答案

宁侯林
2023-03-14

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

#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')
微生德运
2023-03-14

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

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

这将使所有模型类在脚本中以全局形式可用。

 类似资料:
  • 问题内容: 我有一些CSV数据,我想使用示例CSV数据导入django模型: 我有一些名为Product的django模型。在产品还有像一些领域,和。我想要这样的东西: 问题答案: 你想使用python语言中的csv模块,并且应该使用Django的get_or_create方法 在我的示例中,模型老师具有三个属性first_name,last_name和middle_name。

  • 问题内容: 我的目录结构如下: 从导入模块。我尝试结合使用with ,但是使用该方法,我只能在using下直接导入所有子模块。我想让他们全都陷入困境。导入的所有子模块的最干净的方法是什么,以便可以从中访问? 编辑:对不起,我有点含糊。我想在运行时导入子模块,而不在中明确指定它们。我可以用来获取子模块名称(除非有人知道更好的方法),但是我不确定使用这些名称(或者返回的ImpImporters ?)导

  • 我试图修改一些模型(如< code>User模型)许多实例,这些更改是不同的(我不想使用update 方法,这对于我的场景不起作用)。 例如,一些用户需要更改,一些用户需要更改并获得如下用户: 我认为如果我在更改后对每个实例使用保存方法,Django会发送一个保存查询! 如何将对数据库的所有更改保存在一个查询中,而不是在模型上使用 foreach 并逐个保存?

  • 我正在做一个项目,我需要使用几个DateTime字段,我已经在我的模型中定义了,然后在模板中,我正在使用https://tempusdominus.github.io/bootstrap-4/插件,但是当我提交表单时,有两个问题来吧: 1) :Django说为所有DateTime字段输入有效的日期/时间(2):选择有效选项<代码>[“玉米油”]不是可用选项之一。 以下是我尝试过的: 从: 从: 从

  • 问题内容: 使用inspectdb,我可以从postgres到Django获取一个“间隔”字段。在Django中,它是一个TextField。我检索到的对象确实是一个timedelta对象! 现在,我想将此timedelta对象放入新模型中。最好的方法是什么?因为将timedelta放在TextField中会导致对象的str版本… 问题答案: 您可以以天或秒为单位将时间增量标准化为单个浮点数。 这

  • 我有Gammer模型,即用户扩展和竞争模型。很多用户可以参加一场比赛,而一场比赛可以有很多用户(很多) 插件管理。py: 管理员可以查看球员比赛(用户)或为他们分配能力 现在我希望玩家(用户)可以注册比赛(选择比赛)。我如何继续?