2012-06-21 48 views
1

Django應用程序的目的是重新分配沒有manage.py(也不settings.py,因爲它是該項目的一部分,而不是應用程序)。django可重新發布的應用程序與南

如何在此場景中運行schemamigration --auto?爲了做到這一點,我需要將最小設置/ manage.py作爲應用程序存儲庫的一部分嗎?有沒有辦法做到這一點與django-admin.py?

回答

1

你只需要在應用程序添加到您的Installed_Appssettings.py

然後你可以運行./manage.py schemamigration <app_name> --auto

如果應用程序沒有任何遷移,你會想運行./manage.py schemamigration <app_name> --initial,然後再從./manage.py schemamigration <app_name> --auto然後開始。

+0

該應用沒有settings.py或manage.py(這是問題)。應用程序通常只是包含urls.py,models.py等包的項目(manage.py,settings.py) – Mark

+0

應用程序只是一組可以添加到項目中的視圖,模型和模板。項目是Django實例的設置集合,以及manage.py文件所在的位置。您需要將該應用程序添加到現有項目或爲其創建一個。請參閱此答案,瞭解應用程序與項目之間差異的說明:http://stackoverflow.com/a/734321/992040 – nates

+0

是的,我明白這一點。但是可重新分發的應用程序中的模型本身可能具有南遷移。目前我無法找到具有模型遷移的可插入應用程序的示例。理想情況下,應用程序存儲庫中不會包含項目工件。 – Mark

0

只是設法讓我的項目之一工作。下面是對我的作品的代碼:

import sys 

from django.conf import settings 
from django.core.management import call_command 


if not settings.configured: 
    settings.configure(
     ROOT_URLCONF='', 
     DEBUG=False, 
     DATABASES={ 
      'default': { 
       'ENGINE': 'django.db.backends.sqlite3', 
       'NAME': 'test.db' 
      } 
     }, 
     INSTALLED_APPS=(
      'south', 
      'my_app', 
     ) 
    ) 

if __name__ == "__main__": 
    call_command('schemamigration', 'my_app', 
       initial=len(sys.argv) > 1, 
       auto=len(sys.argv) == 0 

以上腳本保存爲migrate.pypython migrate.pypython migrate.py i運行(在i可以是任何東西,它會使用--initial代替--auto如果存在的話)。顯然,你可以做更有趣的命令行選項parsin,但這對我很有用。

編輯:更新了腳本,DATABASES鍵丟失。在這個項目中,我使用相同的數據庫來測試代碼,所以它不是一個完全任意的配置。

相關問題