【问题标题】:django migrations does not update databasedjango 迁移不更新数据库
【发布时间】:2021-07-06 18:35:19
【问题描述】:

我的 django 应用程序已经在线并正在运行。我创建了新模型,如果我进行了 makemigrations,它工作正常,但如果我想迁移它,那么我会收到 Running migrations:No migrations 来申请。尽管我做出了改变。更改也在迁移文件中。我正在使用 postgresql。我试图删除迁移文件并再次创建它,但它没有帮助。知道可能出了什么问题吗?

【问题讨论】:

  • 确定尚未应用迁移吗?你检查过数据库吗?
  • 是的,我做到了,那里缺少两张桌子。即使在管理菜单中,我尝试添加一条记录也会引发服务器错误(500)

标签: django postgresql django-migrations


【解决方案1】:

看起来有些迁移在数据库中被标记为应用不正确。这可以通过使用--fake flag [Django docs] 将适当的迁移标记为已应用/某些迁移标记为未应用来解决。

假设您的应用程序名为 myapp 并且迁移 0004正确应用到数据库(您尝试应用 0005 或进一步这不起作用)然后您将运行以下命令:

python manage.py migrate myapp 0004 --fake

注意myapp0004 是一个示例,请根据您的应用名称和应用了哪些迁移来执行此操作。

编辑:您似乎已删除迁移。但幸运的是,有一些版本控制到位。最好的办法是从版本控制中取回迁移文件。如果由于某种原因您无法执行此操作,请将模型恢复到更改之前的状态,并确保暂时不存在迁移文件。接下来通过运行makemigrations 生成迁移文件(检查它们是否符合预期并且您的数据库状态对应于这些生成的文件)。接下来运行以下两个命令:

python manage.py migrate <appname> zero --fake
python manage.py migrate <appname> --fake

第一个会将所有迁移标记为未应用的应用。第二个会将所有迁移标记为已应用。接下来,您将把想要做的更改添加回模型并再次迁移。

【讨论】:

  • 我删除了所有以前的 000X 文件。没有办法恢复吧?
  • @pipikej 你知道你所做的改变吗?你能把你的模型代码恢复到原来的样子吗?也许你有一些版本控制(git等)?
  • 是的,我有一个 git,是的,我可以将更改恢复到以前的版本。
  • @pipikej 检查我的编辑。最好能从版本控制中获取迁移文件。
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 2021-12-20
  • 2017-03-30
相关资源
最近更新 更多