我正在制作一个没有项目的可重复使用的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.
显然,这是因为我没有配置设置模块,因为这是一个可重用的应用程序。但是,我仍然希望通过我的应用程序发布迁移。我该怎么做?
答案 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