打算重新分发的 Django 应用程序没有 manage.py(也没有 settings.py,因为它是项目的一部分,而不是应用程序的一部分)。
在这种情况下如何运行 schemamigration --auto ?为了做到这一点,我是否需要有一个最小的 settings/manage.py 作为应用程序存储库的一部分?有没有办法用 django-admin.py 做到这一点?
打算重新分发的 Django 应用程序没有 manage.py(也没有 settings.py,因为它是项目的一部分,而不是应用程序的一部分)。
在这种情况下如何运行 schemamigration --auto ?为了做到这一点,我是否需要有一个最小的 settings/manage.py 作为应用程序存储库的一部分?有没有办法用 django-admin.py 做到这一点?
您只需要将应用程序添加到您Installed_Apps
的settings.py
然后你可以运行./manage.py schemamigration <app_name> --auto
如果应用程序没有任何迁移,您将需要先运行./manage.py schemamigration <app_name> --initial
,然后./manage.py schemamigration <app_name> --auto
再运行。
刚刚设法让这个在我的一个项目中发挥作用。这是对我有用的代码:
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.py
并使用python migrate.py
or运行python migrate.py i
(i
可以是任何东西,如果存在,它将使用--initial
而不是--auto
)。显然,您可以执行更高级的命令行选项解析,但这对我有用。
编辑:更新了脚本,DATABASES
缺少密钥。在这个项目中,我使用相同的数据库来测试代码,所以它不是一个完全任意的配置。