正如标题所说,我似乎无法让迁移工作.
该应用程序最初低于1.6,因此我了解迁移最初不会出现,事实上,如果我运行,python manage.py migrate
我得到:
Operations to perform: Synchronize unmigrated apps: myapp Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Installing custom SQL... Installing indexes... Running migrations: No migrations to apply.
如果我对任何模型进行更改myapp
,它仍然会按预期显示未迁移.
但如果我跑,python manage.py makemigrations myapp
我得到:
No changes detected in app 'myapp'
似乎没关系我运行命令的内容或方式,它从未检测到应用程序有更改,也没有将任何迁移文件添加到应用程序.
有没有办法迫使应用程序进行迁移,并基本上说"这是我的工作基础"或任何东西?或者我错过了什么?
我的数据库是一个PostgreSQL,如果它有帮助的话.
同意@furins.如果一切看起来都是有序的,但是出现了这个问题,请检查是否有任何属性方法与您尝试在Model类中添加的属性具有相同的标题.
删除与要添加的属性具有相似名称的方法.
manage.py makemigrations my_app
manage.py迁移my_app
添加方法.
我的解决方案没有在这里讨论,所以我发布了它.我一直在syncdb
用于一个项目 - 只是为了让它运行起来.然后,当我尝试开始使用Django迁移时,它首先伪造它们然后会说它'OK'但数据库没有发生任何事情.
我的解决方案是删除我的应用程序的所有迁移文件,以及django_migrations
表中应用程序迁移的数据库记录.
然后我刚做了一个初始迁移:
./manage.py makemigrations my_app
其次是:
./manage.py migrate my_app
现在我可以毫无问题地进行迁移.
好吧,看起来我错过了一个明显的步骤,但发布这个以防其他人也这样做.
当升级到1.7时,我的模型变得不受管理(managed = False
) - 我像True
以前一样拥有它们但似乎已经恢复了.
删除该行(默认为True)然后makemigrations
立即运行创建了一个迁移模块,现在它正在运行.makemigrations
将不适用于非托管表(事后很明显)
也许这会对某人有所帮助.我正在使用嵌套的应用程序.project.appname和我实际上在INSTALLED_APPS中有project和project.appname.从INSTALLED_APPS中删除项目允许检测更改.
答案是在这个stackoverflow帖子,由Django 1.7中的 cdvv7788 迁移
如果您是第一次迁移该应用程序,则必须使用:
manage.py makemigrations myappname一旦你这样做,你可以做:
manage.py migrate如果您的应用程序在数据库中,修改了它的模型并且没有更新makemigrations上的更改,那么您可能还没有迁移它.将模型更改回原始形式,运行第一个命令(使用应用程序名称)并迁移...它会伪造它.一旦这样做,就可以在模型上放回更改,运行makemigrations并再次迁移,它应该可以正常工作.
我遇到了同样的麻烦,并且完成了上述工作.
我已经将我的django应用程序移动到了cloud9,由于某种原因,我从未捕获过初始迁移.
也许我来不及但是你试着migrations
在你的应用程序中有一个__init__.py
文件夹吗?
如果您要从django 1.6中的现有应用程序进行切换,那么您需要执行文档中列出的一个前置步骤(如我所知):
python manage.py makemigrations your_app_label
文档并没有明显表明你需要在命令中添加app标签,因为它告诉你要做的第一件事就是python manage.py makemigrations
失败.初始迁移是在1.7版本中创建应用程序时完成的,但如果您来自1.6,则不会执行.有关详细信息,请参阅文档中的"向应用程序添加迁移".
以下为我工作:
将应用名称添加到settings.py
使用'python manage.py makemigrations'
使用'python manage.py migrate'
为我工作:Python 3.4,Django 1.10
这是一个愚蠢的错误,但在模型类的字段声明行的末尾有一个额外的逗号,使该行无效.
当您复制粘贴def时会发生这种情况.来自迁移,它本身被定义为一个数组.
虽然这可能有助于某人:-)
这可能是由于以下原因:
您没有在INSTALLED_APPS
列表中添加应用程序settings.py
(您必须在应用程序文件夹中的apps.py中添加AppConfig子类的应用程序名称或虚线路径,具体取决于您使用的django版本).请参阅文档:INSTALLED_APPS
您migrations
在这些应用中没有文件夹.(解决方案:只创建该文件夹).
您没有这些应用程序的__init__.py
文件migrations
夹内的文件.(解决方案:只需创建一个名为__init__.py的空文件)
__init__.py
app文件夹中没有文件.(解决方案:只需创建一个名为__init__.py的空文件)
您models.py
的应用中没有文件
您的Python类(应该是模型)models.py
不会继承django.db.models.Model
你在模型的定义中有一些语义错误 models.py
注意:
常见的错误是migrations
在.gitignore
文件中添加文件夹.从远程仓库克隆时,本地仓库中将缺少文件migrations
夹和/或__init__.py
文件.这会导致问题.
我建议通过向文件添加以下行来忽略迁移.gitignore
文件
*/migrations/* !*/migrations/__init__.py
你要检查settings.py
的INSTALLED_APPS
列表,并确保所有型号的应用程序是在那里上市.
makemigrations
在项目文件夹中运行意味着它将查看更新与settings.py
项目中包含的所有应用程序相关的所有表.一旦你包含它,makemigrations
将自动包含应用程序(这节省了大量的工作,因此你不必makemigrations app_name
为项目/网站中的每个应用程序运行).
像我这样不喜欢迁移的人可以使用以下步骤.
删除要同步的更改.
运行python manage.py makemigrations app_label
初始迁移.
python manage.py migrate
在进行更改之前运行以创建表.
粘贴您在第一步中删除的更改.
运行2.和3.步骤.
如果您混淆了这些步骤,请阅读迁移文件.更改它们以更正您的架构或删除不需要的文件,但不要忘记更改下一个迁移文件的依赖项部分;)
我希望这将有助于将来的某些人.
以防万一您有一个不能由makemigrations标识的特定字段:检查两次是否具有相同名称的属性。
例:
field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True) # ... later @property def field(self): pass
该属性将“覆盖”字段定义,因此更改不会被标识 makemigrations