Django makemigrations 未检测到项目/应用程序/myapp

Posted

技术标签:

【中文标题】Django makemigrations 未检测到项目/应用程序/myapp【英文标题】:Django makemigrations not detecting project/apps/myapp 【发布时间】:2017-02-02 09:49:25 【问题描述】:

已解决 有趣:

./manage.py makemigrations apps.myapp -> “App 'apps.myapp' 可以 找不到。它在 INSTALLED_APPS 中吗?” ./manage.py makemigrations myapp -> 有效。 ./manage.py makemigrations -> “未检测到更改”(如果 myapp 在项目根目录中,它会检测到更改)

原问题: 项目结构

myproject/
    myproject/
    apps/
        myapp/
            __init__.py
            admin.py
            models.py
            urls.py
            views.py
            tests.py
        myapp2/
        myapp3/
        __init__.py
    static/
    templates/
    virtualenv/
    manage.py

myproject/apps/myapp/models.py

from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)

Settings.py

INSTALLED_APPS = [
    # ...
    'apps.myapp',
    'apps.myapp2',
    'apps.myapp3',
]

makemigrations 找不到不在项目根目录中的“myapps”。 同时migrate确实找到了。

$ ./manage.py makemigrations apps.myapp
App 'apps.myapp' could not be found. Is it in INSTALLED_APPS?

$ ./manage.py migrate apps.myapp
CommandError: App 'apps.myapp' does not have migrations.

“让我们将应用程序放入应用程序文件夹”的做法是否不再有效,是我做错了什么,还是makemigrations 命令的错误?

注意 1:在运行 makemigrations 之前,我删除了 myapp 的“迁移”文件夹,但我很确定这没关系。当应用程序位于项目根目录时,它确实被重新创建了。

注 2:我研究了 google 和 ***,我只发现了类似的问题,解决方案是“将应用程序添加到 settings.py”、“在迁移之前运行 makemigrations”或“Django 1.6 和1.7"。我认为这些都不适用于我的情况。

【问题讨论】:

RE:注意 1,是的,这很重要 - 如果没有迁移文件夹,它不会创建也不会创建迁移。 如果 myapp 在项目根目录中,它会创建迁移文件夹。 我开始了一个新的应用程序,移动到“apps”目录下,它有“migrations”文件夹。我遇到了同样的错误。 你是否在 Meta 类中通过了 app_label:如果通过了,那么你也必须提供 app_label。 【参考方案1】:

您可能已删除应用内的迁移文件夹或 <app>/migrations/ 文件夹内的 __init__.py,创建一个新的

myproject/
apps/
    myapp/
        migrations/
            __init__.py

你总是可以单独做迁移而不做上述步骤

python manage.py makemigrations myapp

【讨论】:

【参考方案2】:

试试

INSTALLED_APPS = [
    # ...
    'myproject.apps.myapp',
]

python manage.py makemigrations myapp 

【讨论】:

试过了:ImportError: No module named 'myproject.apps' 你能说得更具体些吗?我应该分享我的哪一部分设置,以便您更好地了解它可能有什么问题? 有同样的问题,发布的答案是正确的。如果您收到导入错误,请尝试“python manage.py shell”以获取有关该错误的更多详细信息。 为什么我们必须使用myproject 作为前缀?为什么django不能在apps文件夹中找到应用程序?【参考方案3】:

现在可以了。它以前不起作用,因为我没有对我的模型进行任何更改。 我是 django 的新手,正在尝试从我观看的视频中执行命令。 Django 文档告诉您 makemigrations 根据您对模型所做的更改创建新的迁移。因此,我在 models.py 和 admin.py 中进行了更改,它现在可以工作了。

【讨论】:

以上是关于Django makemigrations 未检测到项目/应用程序/myapp的主要内容,如果未能解决你的问题,请参考以下文章

未检测到针对 makemigrations 的更改

makemigrations 无法检测到 django 中的变化

Django中的Python社交身份验证,makemigrations检测到没有变化

makemigrations 响应 指定 app_label 时未检测到更改

Django 使用数组字段在 makemigrations 上引发应用程序未加载错误

Django:啥时候运行makemigrations?