2011-06-13 87 views

回答

21

南不是項目範圍。它是應用程序的廣泛。
有些應用程序使用南方,有些應用程序不使用它。

如果一個應用程序集成南,做數據庫的變化,你將使用

./manage.py schemamigration appname --auto 
./manage.py migrate appname 

但並非所有的應用程序都與南集成。

當您向項目中添加一個不使用南的新應用程序時,您需要爲這些應用程序調用./manage.py syncdb。 (例如,django.contrib應用)

總之,使用./manage.py syncdb當一個應用程序確實爲南集成應用不使用南,./manage.py migrate

+0

謝謝你的清晰解釋。我編輯你的答案來添加一些格式。 – 2011-06-14 01:08:09

+3

我發現南方行爲混亂,直到我意識到南方更改syncdb行爲。一個安裝的syncdb是由South管理的應用程序無法運行的。所以你可以在網站上運行syncdb,即使它有一些由南部管理的應用程序。當你第一次安裝南時,你必須小心,syncdb和初始遷移是一致的,但是一旦你完成了,它很好的容錯。 – Nils 2012-03-20 17:07:03

+1

需要注意的一點是,南遷移在應用程序的任何裝置加載之前運行。我剛剛遇到過這個問題,因爲我試圖運行一個假定initial_data.json fixture中的行已經加載的數據遷移。 – tobych 2013-01-03 20:16:20

8

當您創建或安裝新的應用程序MyApp的,應先執行以下命令:

./manage.py schemamigration MyApp --inital 
./manage.py migrate MyApp 

之後,每當你執行./manage.py syncdb您將看到:

Syncing... 
Creating tables ... 
Installing custom SQL ... 
Installing indexes ... 
Installed 0 object(s) from 0 fixture(s) 

Synced: 
> south 
> django.contrib.auth 
> django.contrib.contenttypes 
> django.contrib.sessions 
> django.contrib.sites 
> django.contrib.messages 
> django.contrib.staticfiles 
> django.contrib.admin 
> django.contrib.admindocs 

Not synced (use migrations): 
- MyApp 
(use ./manage.py migrate to migrate these) 

你可以看到, manage.py syncdb能夠區分South管理的應用(Not synced部分)和不受South管理的應用(Synced部分)。它還提醒您使用./manage.py migrate

重要的一點是讓南執行./manage.py syncdb前通過執行./manage.py schemamigration MyApp --inital./manage.py migrate MyApp管理新的應用程序。

相關問題