【发布时间】:2015-03-28 17:14:33
【问题描述】:
docs 对此问题保持沉默。命令是否会按顺序注册,以后的应用程序(以settings.INSTALLED_APPS 顺序)会覆盖以前的命令(无论是来自其他应用程序的自定义命令还是内置的 Django 命令)?
【问题讨论】:
docs 对此问题保持沉默。命令是否会按顺序注册,以后的应用程序(以settings.INSTALLED_APPS 顺序)会覆盖以前的命令(无论是来自其他应用程序的自定义命令还是内置的 Django 命令)?
【问题讨论】:
命令以 reverse 应用顺序注册(请参阅here)。因此,要在应用程序foo 中使用您自己的版本在应用程序bar 中覆盖FooCommand,bar 必须先于 foo in settings.INSTALLED_APPS。
这很不幸,因为您可能出于其他原因需要bar 关注foo。例如,如果 bar 的模型引用 foo 的模型。
如果可行,一种解决方案是将覆盖命令拆分到一个单独的应用程序中。
【讨论】:
来自Django 2.2 official documentation
当多个应用程序提供同一资源(模板、静态文件、管理命令、翻译)的不同版本时,INSTALLED_APPS 中最先列出的应用程序具有优先权。
【讨论】: