在Django中处理多个应用程序覆盖管理命令

Tom*_*tie 9 python django

我有一个问题,有多个应用程序试图在Django项目中覆盖相同的管理命令.

  1. 有没有合理的方法来解决这个问题?
  2. 哪个优先级 - 首先定义的应用程序INSTALLED_APPS,或最后定义的应用程序?
  3. 是否有可能有效地子类化最近定义的管理命令而不是简单地替换它?

对于上下文,我试图得到django_pdb(参见github)更好地使用southdjango.contrib.staticfiles.

Ted*_*Ted 1

我知道的最简单的答案是:构建您的项目,以便您可以更改其中一个项目并保留更改记录,以便您可以将其应用到未来的版本中。

对于我的项目,我喜欢:

/myproject
  /lib
    /app1
    /app2
    /app3
Run Code Online (Sandbox Code Playgroud)

然后显式地将 /lib 添加到 setup.py 中的路径中

import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

import sys
lib_dir = os.path.join(PROJECT_PATH, 'lib')
if lib_dir not in sys.path[:4]:
    sys.path.insert(1, os.path.join(PROJECT_PATH, 'lib'))
Run Code Online (Sandbox Code Playgroud)

与一般人相比,我更有可能选择一个应用程序,安装它,然后对其进行 10% 的更改,使其完全按照我想要的方式工作。

这样做的优点是:1) 大多数依赖项随代码一起提供,并在 GIT 中进行跟踪 2) 如果您在同一台计算机上运行多个应用程序,则系统范围内的更改不会意外导致应用程序中出现错误 3) 易于通过修订历史记录更改应用程序中的任何内容。

由于没有深入研究 South 的管理命令,也从未使用过 django_pdb,您的特定问题可能无法通过“制作本地副本并重命名其中一个”方法来解决,但我分享以防万一。