如何为可重用的Django应用程序进行迁移?

时间:2016-05-30 14:37:49

标签: python django migration

我正在制作一个没有项目的可重复使用的Django应用程序。这是目录结构:

/
/myapp/
/myapp/models.py
/myapp/migrations/
/myapp/migrations/__init__.py

当我运行django-admin makemigrations时,我收到以下错误:

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

显然,这是因为我没有配置设置模块,因为这是一个可重用的应用程序。但是,我仍然希望通过我的应用程序发布迁移。我该怎么做?

3 个答案:

答案 0 :(得分:12)

您需要一个功能性的Django项目(在其中安装您的应用程序)才能进行迁移。

执行此操作的常用方法是进行"测试"包含Django项目的必需品的项目,您可以运行以进行迁移等。迁移将在应用程序目录中的正确位置创建,因此您仍可以在自己的可重用应用程序中进行适当的版本控制等。

以这种方式创建的迁移将是自包含的(假设您的模型不依赖于其他应用程序的模型),并且可以作为打包的可重用应用程序的一部分提供。

许多较大的基于Django的项目实际上是将测试项目作为其代码的一部分,因此开发人员可以快速运行它以测试应用程序并进行迁移等。

答案 1 :(得分:12)

实际上,您不需要拥有项目,只需要设置文件和脚本即可运行迁移。 设置必须包含以下内容(最低):

# test_settings.py

DEBUG = True

SECRET_KEY = 'fake-key'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'your_app'
]

使迁移的脚本应如下所示:

# make_migrations.py

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_settings")
    from django.core.management import execute_from_command_line
    args = sys.argv + ["makemigrations", "your_app"]
    execute_from_command_line(args)

你应该按python make_migrations.py运行它。希望它可以帮助别人!

答案 2 :(得分:0)

创建设置文件:

SECRET_KEY = 'fake-key'

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'your_app'
]

然后

export DJANGO_SETTINGS_MODULE=yourapp.migrations_settings
django-admin makemigrations yourapp