2012-02-02 28 views
3

我正在使用Django和South進行遷移的項目。我想設置一些固定裝置,用於在某些環境(開發,演示)中填充數據庫,但不在其他(生產)中。例如,我希望系統中有一些數據,這樣UI開發人員就可以在他們正在工作的界面中使用某些東西,或者我們可以快速地爲項目經理進行演示,而無需通過手動設置管理界面。Django南基於環境的加載裝置(開發,集成,生產)

雖然我發現了很多方法來將自動化測試夾具與常規夾具分開,但我還是無法找到任何有關基於環境加載夾具的信息。這是可能的,還是有另一種方式讓人們解決我忽略的這個問題?

回答

2

關於initial_data燈具,您無能爲力。不過,我總覺得那些效用低於最佳效果。您很少想要每次撥打syncdbmigrate時再次應用相同的燈具。

如果你使用的是不同的名稱,夾具,你可以很容易使其與遷移運行中加入以下到您轉發遷移(從South docs

from django.core.management import call_command 
call_command("loaddata", "my_fixture.json") 

所以真的,所有你需要的是在某些環境中只能這樣做的一些方法。對於開發者來說,最簡單的方法就是簡單地依靠DEBUG。因此,前面的代碼變爲:

from django.conf import settings 
from django.core.management import call_command 
if settings.DEBUG: 
    call_command("loaddata", "dev_fixture.json") 

如果你需要更大的控制權,就可以建立某種形式的設置,將在每一個不同local_settings.py(或者你使用什麼方法,基於環境的自定義設置)。例如:

# local_settings.py 
ENV = 'staging' 

# migration 
from django.conf import settings 
from django.core.management import call_command 
if settings.ENV == 'staging': 
    call_command("loaddata", "staging_fixture.json") 
+0

很好的答案!你如何處理過時的設備:你像對待移動一樣對待它們嗎?因此,如果您的夾具加載遷移是#3,並且在10次遷移後夾具已過時,那麼您是否只添加一個新的遷移,以加載一個新的夾具,該遷移成爲遷移#14? – jawilmont 2012-02-02 18:10:49

+0

固定裝置本質上是即時快照。如果你的數據庫從一個遷移改變,他們很可能不會再工作了。所以,我會說,是的,如果您創建新的遷移並需要專門處理該遷移的設備,則應該簡單地根據數據庫的當前狀態創建一個新的設備。 – 2012-02-02 18:30:07