正如标题所说,我似乎无法得到迁移工作。
该应用程序最初是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的一个没有什么帮助的。
如果你从你在Django 1.6由现有的应用程序切换,那么你需要做一个预一步的文档中列出(我发现):
蟒蛇manage.py makemigrations your_app_label
文档没有使它明显,你需要的应用程序添加标签的命令,它会告诉你做的第一件事就是python manage.py makemigrations
将失败。当您创建1.7版本的应用程序的初始迁移已完成,但如果从1.6来了就不会被执行。查看文档中的'Adding migration to apps'了解更多详情。
以下为我工作:
工作对我来说:Python的3.4,Django的1.10
像我这样的人谁不喜欢的迁移可以使用以下步骤。
python manage.py makemigrations app_label
。python manage.py migrate
。如果你感到困惑任何一个步骤,阅读迁移文件。改变他们改正你的架构或删除不需要的文件,但不要忘记改变一个迁移文件的依赖性来;)
我希望这将帮助别人的未来。
要检查在settings.py
列表中INSTALLED_APPS
,并确保所有型号的应用程序是在那里上市。
在项目文件夹运行makemigrations
意味着它会寻找更新所有涉及到包括在settings.py
项目的所有应用程序表。一旦你包含它,makemigrations
将自动包括应用程序(这样可以节省大量的工作,所以你不必跑makemigrations app_name
在你的项目/网站每一个应用程序)。
万一你有没有得到通过makemigrations标识的特定字段:两次检查,如果你有相同名称的属性。
例:
field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True)
# ... later
@property
def field(self):
pass
该属性将“覆盖”字段定义这样的改变将不会被makemigrations
鉴定
添加这个答案,因为只有这个方法帮助了我。
我删除了文件夹migrations
运行makemigrations
和migrate
。
它仍然说:不迁移申请。
我去migrate
文件夹并打开最后一个创建的文件,
发表评论我要迁移(它是检测并进入那里)
并再次运行migrate
。
这基本上编辑迁移手动档。 做到这一点只有当你了解文件内容。
确保你的模型没有abstract
。其实,我犯了那个错误,并用了一段时间,所以我想我会发布它。
难道u使用schemamigration my_app --initial
重命名旧移民文件夹后?试试吧。可能工作。如果没有 - 尝试重新创建数据库,并执行syncdb +迁移。它的工作对我来说...
有同样的问题让你在models.py定义确保任何类,你必须要继承models.Model类。
class Product(models.Model):
title = models.TextField()
description = models.TextField()
price = models.TextField()
我曾与不必运行makemigrations两次同样的问题,各种奇怪的行为。原来,根本的问题是,我是用函数来设置默认的日期在我的模型,以便迁移每隔我跑makemigrations时间检测的变化。回答这个问题使我在正确的轨道上:Avoid makemigrations to re-create date field
我最近升级Django的从1.6到1.8,并有一些应用程序和迁移他们。我用南部和schemamigrations
为在Django 1.6,这是在Django 1.8降到创建迁移。
当我升级后增加了新车型,makemigrations
命令没有检测到任何变化。然后我试图通过@drojf(1日回答)提出的解决方案,它工作得很好,但没有提出申请假初始迁移(python manage.py --fake-initial
)。我这样做是我的表(旧表)已创建。
最后,这个工作对我来说,除去从models.py新车型(或模型更改),然后不得不删除(或重命名为安全备份),所有的应用程序的所有应用程序和运行蟒蛇manage.py
makemigrations的迁移文件夹,然后做python manage.py migrate --fake-initial
。这工作就像一个魅力。一旦最初的迁移所有的应用程序创建和假冒迁移初期,然后加入新的模式和遵循makemigrations
的经常性进程,并迁移对应用程序。现在检测到的变化,一切都很好。
我只是想在这里分享它,如果有人面临着同样的问题(为他们的应用程序南方schemamigrations
),它可能会帮助他们:)
这可能以下原因发生的原因:
INSTALLED_APPS
(你必须要么应用程序名称或虚线路径apps.py在应用程序文件夹添加到AppConfig中的子类,这取决于你所使用的Django的版本)添加该应用在settings.py
列表。请参阅文档: INSTALLED_APPSmigrations
文件夹。 (解决方法:只要创建该文件夹)。__init__.py
文件夹内migrations
文件。 (解决方法:只需创建一个名字__init__.py一个空文件)__init__.py
。 (解决方法:只需创建一个名字__init__.py一个空文件)models.py
文件models.py
不继承django.db.models.Model
你的Python类(应该是一个模型)models.py
模型定义注意:一个常见的错误是在migrations
文件中添加.gitignore
文件夹。当从远程回购,migrations
文件夹和/或__init__.py
文件克隆将会丢失在本地回购。这会导致问题。
我建议加入以下行.gitignore
文件gitignore迁移文件
*/migrations/*
!*/migrations/__init__.py
也许这可以帮助别人,我有同样的问题。
我已经创建了串行类和视图中的两个表。所以,当我想更新的,我有这个错误。
我跟着这个步骤:
.\manage.py makemigrations app
.\manage.py migrate
models.py
的两个表1
和2
。models.py
5
。如果你使用Pycharm工作,当地的历史是非常有帮助的。
也许这将帮助别人。
我已经删除了我的models.py
和预期makemigrations
创建DeleteModel
语句。
记得删除*.pyc
文件!
./manage makemigrations
./manage migrate
迁移跟踪。因此如果您从非托管更改为托管更改数据库,你需要确保您选择数据库表达与你处理模型日期。
如果你仍然在开发者模式,我个人决定删除我的IDE以及在与我的模型的django_migrations表迁移文件并重新运行上面的命令。
记住:如果你有一个在你的IDE _001和_003数据库中的结束迁移。 Django将只能看到如果你有_004任何内容更新结束迁移。
的2(代码&分贝迁移)连接和串联工作。
编码愉快。
添加了这个答案,因为没有其他可用的以上为我工作。
在我的情况下一些更奇怪的是发生(Django的1.7版),在我的models.py我有一个“额外”的线在我的文件结尾(这是一个空行),当我执行命令python manage.py makemigrations
的结果:“没有检测到变化”。
为了解决这个问题我删除这个“空白行”那是我的models.py文件的末尾,我并再次运行该命令,一切都被固定并检测到models.py所做的所有更改!
您可能需要假初始迁移使用下面的命令
python manage.py migrate --fake-initial
加入我的2C,因为这些解决方案为我工作的,但这并...
我刚跑manage.py squashmigrations
并删除旧的迁移(这两个文件,并在该django.migrations数据库表行)。
这让喜欢这一行的最后迁移文件:
replaces = [(b'my_app', '0006_auto_20170713_1735'), (b'my_app', '0007_auto_20170713_2003'), (b'my_app', '0008_auto_20170713_2004')]
这显然是混淆Django和造成怪异的行为:因为如果没有存在的运行manage.py makemigrations my_app
将重新创建初始迁移。卸下replaces...
线固定的问题!
好吧,看起来像我错过了一个明显的阶梯,但如果其他人做同样的张贴此。
当升级到1.7,我的模型成为非托管(managed = False
) - 我让他们为True
之前,但似乎它得到了恢复。
删除该行(默认为真),然后运行makemigrations
立即作出了迁移模块,现在它的工作。 makemigrations
不会在非托管表的工作(这是明显在事后)
在这里不讨论我的解决办法,所以我张贴。我一直在使用syncdb
一个项目,只是为了得到它运行起来。然后,当我试图启动使用Django迁移,它伪造了他们的第一个,然后会说这是“OK”,但什么也没有发生到数据库中。
我的解决办法只是删除所有我的应用程序迁移文件,以及数据库记录在django_migrations
表中的应用程序迁移。
然后,我只是做了一个初步的迁移有:
./manage.py makemigrations my_app
其次是:
./manage.py migrate my_app
现在,我可以使迁移没有问题。
与@furins同意。如果一切似乎是为了,但这个问题出现的时候,结账,如果有任何财产法相同的标题,你正试图在Model类中添加的属性。
这是怎样的一个愚蠢的错误作出的,但其在模型类中的字段声明一行的末尾一个额外的逗号,使该行没有任何效果。
当你复制粘贴DEF它发生。从迁移,其本身被定义为一个阵列。
但也许这将帮助别人:-)
也许我太晚了,但你尝试有migrations
文件夹中的应用程序与它__init__.py
文件?
也许这将帮助别人。我使用的是嵌套应用。 project.appname居然和我有项目,并在project.appname INSTALLED_APPS。从INSTALLED_APPS删除项目允许检测的变化。
答案是这个计算器后,通过cdvv7788 Migrations in Django 1.7
如果您正在迁移应用程序的第一次,你必须使用:
manage.py makemigrations myappname一旦你这样做,你可以这样做:
manage.py迁移如果你有在你的数据库应用程序,修改了模型及其不更新你可能还没有迁移它尚未makemigrations的变化。更改模型恢复到原来的形态,运行的第一个命令(应用程序名称)和迁移...这将假的。一旦你这样做放回变化对模型,运行makemigrations并再次迁移,它应该工作。
我有完全一样的麻烦和做上述完美。
我搬到我的Django应用CLOUD9出于某种原因,我从来没有抓到初始迁移。