Django 1.7 - 创建初始迁移

Posted

技术标签:

【中文标题】Django 1.7 - 创建初始迁移【英文标题】:Django 1.7 - create initial migration 【发布时间】:2015-06-27 20:39:32 【问题描述】:

根据the Django docs,如果我想为应用创建初始迁移,我应该这样做:

$ python manage.py makemigrations my_app

但是,如果我在我的项目中这样做,我会得到:

在应用“my_app”中未检测到更改

即使 my_app 还没有迁移 - my_app/migrations/ 文件夹只有一个 __init__.py 文件。

我的模型中没有managed = False。有问题的模型类甚至没有定义 Meta 类。还有什么可以阻止 Django 检测模型更改?

Django 如何检测是否/何时发生变化?

更新: 我应该补充一点,当我使用 South 迁移时,这个特定应用程序的迁移工作得很好。只有在升级到 Django 1.7 和内置迁移之后,它才能再确定该特定应用程序是否/何时发生模型更改(其他应用程序的迁移工作正常)。

【问题讨论】:

您的模型定义正确吗?即,它们是否继承自 models.Model 是的,它们继承自 models.Model。当我使用 South 而不是 Django 1.7 迁移时,这些模型的迁移工作正常。当我遇到上述问题时,我实际上正在升级到 Django 1.7。我按照“从南方升级”的说明进行操作,然后发现有一个应用缺少迁移。 尝试更改您的模型并运行python manage.py makemigrations my_app 以查看输出是什么(然后您可以撤消模型更改并删除迁移,而您的代码和数据库不受影响)。 @mcastle - 我试过了。就迁移而言,该应用程序中没有识别出其他更改。 @Filly - 我试过了。不幸的是,结果是一样的。现在,我刚刚手动创建了迁移。那会让我过去的。 【参考方案1】:

有点晚了,但是在创建了一个全新的应用程序后刚刚遇到这个问题,我突然意识到我没有将新应用程序添加到 settings.py 中的 INSTALLED_APPS 中。

INSTALLED_APPS = (
    ...
    my_app,
    ...
)

这样做然后重新运行python manage.py makemigrations my_app 会生成初始迁移。

【讨论】:

【参考方案2】:

您可能希望在 virtualenv 主目录或路径中的某处查找“迁移”目录。

在尝试将应用程序从 South 迁移到 Django 1.7 迁移时,我遇到了几次类似的问题。出于某种原因,Django 找不到正确的迁移文件夹,因此会将迁移创建到不太可能的位置,例如<virtualenv>/bin/myapp/migrations dir(使用django-admin.py 时)。所以每次我运行makemigrations Django 都会发现这个“陈旧”的迁移,并显示No changes detected in app 'my_app' 消息。

对不起,如果我对细节含糊不清,下次遇到这个问题时我会更新。

【讨论】:

以上是关于Django 1.7 - 创建初始迁移的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.7 迁移不会重新创建删除的表,为啥?

Django 1.7 - makemigrations 为非托管模型创建迁移

为啥 django 1.7 会为字段选择的变化创建迁移?

在迁移中获取模型 ContentType - Django 1.7

恢复 Django 1.7 RemoveField 迁移

我的旧项目出现 Django 1.7 迁移问题