文档对此问题保持沉默。命令是否会按顺序注册,以后的应用程序(按settings.INSTALLED_APPS
顺序)会覆盖以前的命令(无论是来自其他应用程序的自定义命令还是内置的 Django 命令)?
问问题
1548 次
3 回答
4
答案是肯定的,从当前的 1.7 版本开始。
请参阅Django 源代码中的这一行以查看逻辑的实现位置:按照每个元组的应用程序顺序,将每个应用程序的管理命令添加到命令字典(此处settings.INSTALLED_APPS
使用 Django 的内置命令初始化),并带有任何给定命令名称的单个插槽,以便最后一个添加棒,覆盖任何以前的应用程序(或 Django 的内置)具有相同名称的命令;执行命令时(此处为代码),Django 使用上面的字典来决定实际使用哪个命令逻辑。
请注意,我没有找到任何有关此的文档,因此从技术上讲,它应该被视为非官方行为。
于 2015-03-28T18:31:34.467 回答
1
命令以相反的应用程序顺序注册(参见此处)。FooCommand
因此,要在 appfoo
中使用您自己的版本覆盖app bar
,bar
必须先于 foo
in settings.INSTALLED_APPS
。
这是不幸的,因为您可能出于其他原因需要bar
遵循foo
。例如, ifbar
的模型引用foo
的模型。
一种解决方案是将覆盖命令拆分为单独的应用程序(如果可行)。
于 2016-01-23T23:12:48.303 回答
0
当多个应用程序提供相同资源(模板、静态文件、管理命令、翻译)的不同版本时,INSTALLED_APPS 中首先列出的应用程序具有优先权。
于 2019-05-06T12:13:40.393 回答