Tyr*_*ave 138 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:
  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,如果它有帮助的话.
dro*_*ojf 180
如果您要从django 1.6中的现有应用程序进行切换,那么您需要执行文档中列出的一个前置步骤(如我所知):
python manage.py makemigrations your_app_label
文档并没有明显表明你需要在命令中添加app标签,因为它告诉你要做的第一件事就是python manage.py makemigrations失败.初始迁移是在1.7版本中创建应用程序时完成的,但如果您来自1.6,则不会执行.有关详细信息,请参阅文档中的"向应用程序添加迁移".
Moh*_*f C 43
这可能是由于以下原因:
INSTALLED_APPS列表中添加应用程序settings.py
(您必须在应用程序文件夹中的apps.py中添加AppConfig子类的应用程序名称或虚线路径,具体取决于您使用的django版本).请参阅文档:INSTALLED_APPS migrations在这些应用中没有文件夹.(解决方案:只创建该文件夹).__init__.py文件migrations夹内的文件.(解决方案:只需创建一个名为__init__.py的空文件)__init__.pyapp文件夹中没有文件.(解决方案:只需创建一个名为__init__.py的空文件)models.py的应用中没有文件models.py不会继承django.db.models.Modelmodels.py注意: 
常见的错误是migrations在.gitignore文件中添加文件夹.从远程仓库克隆时,本地仓库中将缺少文件migrations夹和/或__init__.py文件.这会导致问题.
我建议通过向文件添加以下行来忽略迁移.gitignore文件
*/migrations/*
!*/migrations/__init__.py
Tyr*_*ave 28
好吧,看起来我错过了一个明显的步骤,但发布这个以防其他人也这样做.
当升级到1.7时,我的模型变得不受管理(managed = False) - 我像True以前一样拥有它们但似乎已经恢复了.
删除该行(默认为True)然后makemigrations立即运行创建了一个迁移模块,现在它正在运行.makemigrations将不适用于非托管表(事后很明显)
Gra*_*gon 19
我的解决方案没有在这里讨论,所以我发布了它.我一直在syncdb用于一个项目 - 只是为了让它运行起来.然后,当我尝试开始使用Django迁移时,它首先伪造它们然后会说它'OK'但数据库没有发生任何事情.
我的解决方案是删除我的应用程序的所有迁移文件,以及django_migrations表中应用程序迁移的数据库记录.
然后我刚做了一个初始迁移:
./manage.py makemigrations my_app
其次是:
./manage.py migrate my_app
现在我可以毫无问题地进行迁移.
小智 15
同意@furins.如果一切看起来都是有序的,但是出现了这个问题,请检查是否有任何属性方法与您尝试在Model类中添加的属性具有相同的标题.
Ima*_*ari 11
这是一个愚蠢的错误,但在模型类的字段声明行的末尾有一个额外的逗号,使该行无效.
当您复制粘贴def时会发生这种情况.来自迁移,它本身被定义为一个数组.
虽然这可能有助于某人:-)
也许这会对某人有所帮助.我正在使用嵌套的应用程序.project.appname和我实际上在INSTALLED_APPS中有project和project.appname.从INSTALLED_APPS中删除项目允许检测更改.
小智 7
答案是在这个stackoverflow帖子,由Django 1.7中的 cdvv7788 迁移
如果您是第一次迁移该应用程序,则必须使用:
manage.py makemigrations myappname一旦你这样做,你可以做:
manage.py migrate如果您的应用程序在数据库中,修改了它的模型并且没有更新makemigrations上的更改,那么您可能还没有迁移它.将模型更改回原始形式,运行第一个命令(使用应用程序名称)并迁移...它会伪造它.一旦这样做,就可以在模型上放回更改,运行makemigrations并再次迁移,它应该可以正常工作.
我遇到了同样的麻烦,并且完成了上述工作.
我已经将我的django应用程序移动到了cloud9,由于某种原因,我从未捕获过初始迁移.
以下为我工作:
为我工作:Python 3.4,Django 1.10
小智 6
像我这样不喜欢迁移的人可以使用以下步骤.
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文件夹 runmakemigrations和migrate. 
它仍然说:没有要申请的迁移。
我转到migrate文件夹并打开最后创建的文件,
评论我想要的迁移(它被检测到并在那里输入)
并migrate再次运行。
这基本上是手动编辑迁移文件。
仅当您了解文件内容时才执行此操作。
| 归档时间: | 
 | 
| 查看次数: | 102025 次 | 
| 最近记录: |