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 - makemigrations 为非托管模型创建迁移