【发布时间】:2019-03-18 02:44:43
【问题描述】:
这就是我的项目的结构。本题将忽略'lib'目录:
project
app
data -> migrations, models, __init__.py
prodsite -> settings.py, urls.py, wsgi.py, __init__.py
testsite -> same as above
lib
data -> migrations, models, __init__.py
prodsite -> settings.py, urls.py, wsgi.py, __init__.py, common models
testsite -> same as above
tools
manage.py
我希望能够跑步:
python tools/manage.py app.prodsite (makemigrations/migrate) app
修改 manage.py 并不难,将根目录添加到系统路径,将 django 环境变量设置为“app.prodsite”,并从 sys.argv 中删除该参数,然后继续下一步manage.py 通常会。我无法在不导致错误的情况下摆脱最后一个参数:
#!/usr/bin/env python
import os
import sys
import inspect
def main():
sys.path.append(os.getcwd()) # allow reative to cwd, not just module.py.
if "DJANGO_SETTINGS_MODULE" not in os.environ:
if len(sys.argv) < 3:
print("Error in command: {}".format(" ".join(sys.argv)))
print("manage.py should be called like:\r\n"
"manage.py <app> <operation>.")
return
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"{}.settings".format(sys.argv[1]))
del sys.argv[1]
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()
这些是其他相关文件:
# project.app.data:
class M(Model):
class Meta:
app_label = 'app.data'
a: bool
b: str
c: float
# project.app.data.apps
class DataConfig(AppConfig):
name = 'app.data'
# project.app.data.__init__
default_app_config = 'app.data.apps.DataConfig'
# project.app.prodsite.settings
ROOT_URLCONF = 'app.prodsite.urls'
WSGI_APPLICATION = 'app.prodsite.wsgi.application'
INSTALLED_APPS += ['app.data', 'app.micsite']
如果我尝试运行“python bldtool/manage.py app.prodsite makemigrations app.data”,我会收到一条错误消息,询问 app.data 是否在 INSTALLED_APPS 中。
如果我只在 INSTALLED_APPS 中包含“app”,则不会生成错误,但是 django 不会检测到任何更改并且不会生成迁移目录。 (我尝试使用 init.py 创建迁移目录,也没有成功)
我可以做些什么来使这项工作按预期进行?
【问题讨论】:
-
您使用的是哪个版本的 django?我认为您的 installed_apps 应该类似于 ['app.data.DataConfig'] 。你应该通过 appconfig 类
-
我使用的是 django 2.0.7。