2012-06-21 23 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键丢失。在这个项目中,我使用相同的数据库来测试代码,所以它不是一个完全任意的配置。

相关问题