2011-12-29 61 views
9

我有一個問題,其中有多個應用程序試圖覆蓋Django項目中的相同管理命令。在Django中處理多個應用程序覆蓋管理命令

  1. 是否有明智的方法來解決這個問題?
  2. 哪個優先 - 應用程序首先在INSTALLED_APPS中定義,還是最後定義的應用程序?
  3. 是否可以有效地子類化最近定義的管理命令而不是簡單地替換它?

爲背景,我試圖讓django_pdb(見github)與southdjango.contrib.staticfiles更很好地工作。

+2

爲什麼要重命名現有的管理命令?請不要這樣做。請爲您的命令提供獨特的名稱並避免此問題。 – 2011-12-29 17:13:44

+5

我認爲這是一個非常合理的事情,想要在給定的背景下做。 (將--pdb選項添加到現有的測試和runserver命令中)像'south'和'django.contrib.staticfiles'這樣的應用程序就是這樣做的,所以我不會在一條毯子上出售「不這樣做」的迴應。 – 2011-12-29 17:21:42

+0

@SLOTT如果代碼完全在開發人員控制中,這是一個非常愚蠢的問題 - 您只需重命名其中一個。我想他在嘗試使用兩個提供「load_sample_data」命令的社區應用程序時要怎麼做。 – Ted 2011-12-29 17:23:16

回答

1

最簡單的答案我知道的是:構建您的項目,以便您可以更改其中的一個並記錄更改,以便將其應用於將來的版本。

對於我的項目,我想有:

/myproject 
    /lib 
    /app1 
    /app2 
    /app3 

然後明確setup.py添加/ lib目錄的路徑

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')) 

我可能更有可能比一般採取的應用程序,安裝它,然後改變它的10%,以完全按照我的需要工作。

這樣做的好處是:1)大多數依賴隨附代碼並在GIT中進行跟蹤2)如果您在同一臺計算機上運行多個應用程序,並且系統範圍內的更改無意中導致應用程序中的錯誤, 3)易於更改,修訂歷史,任何和應用程序的一切。

沒有深入研究南方的管理命令,也沒有使用django_pdb,您的特定問題可能無法通過「創建本地副本並重命名其中之一」方法解決,但我可以共享以防萬一。

+0

感謝您的建議。如果你正在開發一個單獨的項目,這可能沒什麼問題,但如果你編寫了一個你希望其他人可以安裝的可重用應用程序,這並沒有什麼幫助。 (比如在我的用例中) – 2011-12-29 17:41:03

3

2.5年過去了,但如果有人遇到同樣的問題,並在谷歌搜索後登陸,我已經做了一個小django應用來處理這種情況:django-mcmo('Management Command Multiple Override'),可在pypi上獲得。它有侷限性,但按預期工作。

適用於django 1.4至1.8和py 2和3,歡迎致電bitbucket repo