我将一个简单的项目和两个应用程序放在一个 apps 目录中:

myproject/
| manage.py
|-- myproject/
|   | __init__.py
|   | settings.py
|   | urls.py
|   | wsgi.py
|-- apps/
|   | __init__.py
|   | app1/ # with models.py and views.py
|   | app2/ # with models.py and views.py

我已更新 INSTALLED_APPS 设置以包含 apps.app1apps.app2
apps.app1 是唯一具有模型的应用程序:
class Thing(models.Model):
    stuff = models.CharField(max_length=255)

如果我运行 ./manage.py check 并且它恢复正常。

但是,如果我尝试运行 ./manage.py makemigrations apps.app1,则会出现以下错误:
App 'apps.app1' could not be found. Is it in INSTALLED_APPS?

但是apps.app1明显在settings文件中,这里是settings文件(复制粘贴):
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.app1',
    'apps.app2',
]

我读过的其他内容似乎表明应该可以在子目录中安装 Django 应用程序。

这实际上不可能吗?或者,如果可能的话,我做错了什么?

最佳答案

当您运行 makemigrations 时,您应该使用应用程序 label (例如 app1 ),而不是 name (例如 apps.app1 )。

./manage.py makemigrations app1

关于Django 1.10 对子目录中应用程序的迁移支持,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40405982/

10-12 19:07