Python Django 1.7-使迁移未检测到更改

Python Django 1.7-使迁移未检测到更改,python,django,django-1.7,django-migrations,Python,Django,Django 1.7,Django Migrations,正如标题所说,我似乎无法让迁移正常工作 该应用程序最初是在1.6下开发的,因此我知道最初不会有迁移,事实上,如果我运行python manage.py migrate我会得到: Operations to perform: Synchronize unmigrated apps: myapp Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations:

正如标题所说,我似乎无法让迁移正常工作

该应用程序最初是在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.
No changes detected in app 'myapp'
如果我在
myapp
中对任何模型进行更改,它仍然会像预期的那样显示为ungrated

但是如果我运行
python manage.py makemigrations myapp
我会得到:

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.
No changes detected in app 'myapp'
我运行命令的内容或方式似乎无关紧要,它从未检测到应用程序有更改,也没有向应用程序添加任何迁移文件

有没有办法强迫一个应用程序进行迁移,并说“这是我的工作基础”或其他什么?还是我遗漏了什么


如果有帮助的话,我的数据库是PostgreSQL数据库。

重命名旧迁移文件夹后,您是否使用了
模式迁移我的应用程序--initial
?试试看。可能有用。如果没有-尝试重新创建数据库并使syncdb+迁移。这对我来说很有效…

好吧,看起来我错过了一个明显的步骤,但如果其他人也这样做,我会发布这篇文章

当升级到1.7时,我的模型变得不受管理(
managed=False
)-我以前将它们设置为
True
,但它似乎被还原了


删除该行(默认为True),然后运行
makemigrations
立即创建了一个迁移模块,现在它可以工作了
makemigrations
在非托管表上不起作用(事后看来这是显而易见的)

如果您要从django 1.6中制作的现有应用程序进行转换,则需要执行文档中列出的一个预步骤(如我所知):


python manage.py makemigrations您的应用程序标签


文档没有明确说明您需要将应用程序标签添加到命令中,因为它告诉您要做的第一件事是
python manage.py makemigrations
,这将失败。初始迁移是在1.7版中创建应用程序时完成的,但如果您来自1.6版,则不会执行此迁移。有关更多详细信息,请参阅文档中的。

我也遇到过同样的问题,需要运行两次makemigrations,以及各种奇怪的行为。事实证明,问题的根源在于我使用了一个函数来设置模型中的默认日期,因此每次运行makemigrations时,迁移都会检测到更改。这个问题的答案让我走上了正确的轨道:

我的解决方案没有在这里介绍,所以我将其发布。我一直在为一个项目使用
syncdb
,只是为了让它启动并运行。然后,当我尝试开始使用Django迁移时,它一开始会伪造它们,然后会说“OK”,但数据库没有发生任何变化

我的解决方案是删除我应用程序的所有迁移文件,以及
django_migrations
表中应用程序迁移的数据库记录

然后我用以下工具进行了初始迁移:

/manage.py makemigrations我的应用程序

其次是:

/manage.py迁移我的应用程序


现在我可以毫无问题地进行迁移了。

也许这会对某些人有所帮助。我正在使用一个嵌套的应用程序。project.appname和我实际上在安装的应用程序中有project和project.appname。从已安装的应用程序中删除project可以检测到更改。

您要检查
已安装的应用程序列表中的
设置.py
,并确保其中列出了所有具有型号的应用程序


在项目文件夹中运行
makemigrations
意味着它将更新与项目的
settings.py
中包含的所有应用程序相关的所有表。一旦你包含它,
makemigrations
将自动包含该应用程序(这节省了大量工作,因此你不必为项目/站点中的每个应用程序运行
makemigrations app\u name

答案在这篇stackoverflow帖子上,由cdvv7788提供

如果您是第一次迁移该应用程序,则必须使用:

manage.py makemigrations myappname一旦执行此操作,您就可以执行以下操作:

manage.py迁移如果数据库中有应用程序,请修改其模型 而且它不会更新您可能没有更新的makemigration上的更改 现在还没有。将模型更改回其原始形式,然后运行 第一个命令(应用程序名)和迁移…它将伪造它。一旦 您可以将更改放回模型,运行makemigrations和 再次迁移,它应该会工作

我也遇到了同样的麻烦,做上述的工作也很完美


我已将django应用程序移动到cloud9,由于某些原因,我从未捕获到初始迁移。

以防您有一个特定字段无法通过makemigrations识别:请检查两次是否有同名属性

例如:

field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True)

# ... later

@property
def field(self):
    pass

属性将“覆盖”字段定义,这样更改就不会被
makemigrations

识别这是一个愚蠢的错误,但是在模型类中字段声明行的末尾有一个额外的逗号,会使该行无效

复制粘贴def时会发生这种情况。从迁移开始,迁移本身被定义为数组


虽然这可能会对某些人有所帮助:-)

像我这样不喜欢迁移的人可以使用以下步骤

  • 删除要同步的更改
  • 运行
    python manage.py makemigrations app_label
    进行初始迁移
  • 在进行更改之前,运行
    python manage.py migrate
    创建表
  • 粘贴第一步删除的更改
  • 运行2。三,。步骤
  • 如果您混淆了这些步骤,请阅读迁移文件。更改它们以更正架构或删除不需要的文件,但不要忘记更改下一个迁移文件的依赖项部分;)

    我希望这会对将来的人有所帮助。

    同意@furins的观点。如果
    */migrations/*
    !*/migrations/__init__.py
    
    class Product(models.Model):
        title = models.TextField()
        description = models.TextField()
        price = models.TextField()
    
    python manage.py migrate --fake-initial
    
    from myapp.models.mymodel import MyModel
    
    python manage.py makemigrations