(Django) 创建一个管理命令,它将覆盖 BaseCommand 中的默认设置

2024-01-01

我们总是在 settings_test 上运行测试,如下所示:./manage.py test someapp --settings=settings_test。问题是有时记住添加选项会出现问题。

我想介绍一个常见的应用程序,只有管理命令test.py。根据它在 INSTALLED_APPS 设置中的位置,它将覆盖默认值。在命令本身内部,我想更改 --settings 选项的默认值。我怎样才能做到这一点?

我知道我可以创建一个与manage.py类似的local.py文件,但使用settings_test而不是settings。但是,重点是仍然运行 ./manage.py,但将 settings_test 作为默认值,而不是在 ./manage.py test someapp 之后不断键入“--settings=settings_test”


经过几次尝试,我发现在调用实际管理命令之前,manage.py 设置设置的时间足够长,因此基本上不可能(据我所知)在那里更改它们。 最终我决定,因为改变manage.py似乎是可以的——例如,那里有你的默认设置文件——这将是处理这个问题的合理位置,所以我在那里实现了它:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")

    argv = sys.argv
    try:
        if argv[1] == 'test' and not any([k.startswith('--settings') for k in argv]):
            os.environ["DJANGO_SETTINGS_MODULE"] = "myapp.test_settings"
    except IndexError:
        pass

    from django.core.management import execute_from_command_line
    execute_from_command_line(argv)

这似乎按预期工作,我没有看到任何重大缺点或问题 - 很高兴得到纠正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(Django) 创建一个管理命令,它将覆盖 BaseCommand 中的默认设置 的相关文章

随机推荐