Django缺少迁移文件-如何将数据库与主文件同步?

时间:2018-10-20 19:02:14

标签: django

我的一位开发人员从大师那里签出,并为我们的网站创建了新模型。他进行了makemigrations,然后进行了迁移,显然创建了我们想要的表。

但是,他从未将更改提交到github,而是更改了生产数据库。因此,当我今天去添加一个表时,当我进行makemigrations时,终端会列出一些我已经知道存在的表...我就像“ YOLO!”。并无论如何都运行migrate命令,然后将其删除。

因此,由于迁移文件不在我的迁移文件夹中,因此django认为需要创建这些表...然后创建它们并进行呕吐,因为它们已经存在。

另一个开发人员不在城里探望家人,无法提交文件。

我该如何弄直呢?我认为我需要运行./manage.py迁移my_app --fake

但是我不完全了解这样做的意思,所以我不想走YOLO路线,真的搞砸了一切……

2 个答案:

答案 0 :(得分:0)

好的,我向所有人保证我今天已经在解决这个问题上工作了9.5个小时。原来这就是答案:

Django migrations : relation already exists

但是,由于存在一些拼写/语法错误,很难理解另一个人和我有同样的问题。

重申解决方案:

  1. 类型:./manage.py makemigrations your_app
  2. 导航至my_app / migrations文件夹并打开刚刚创建的迁移文件(通常看起来像是'0005_modelsandstuff_blablabla.py”
  3. 删除尚未存在的模型。保存文件并关闭
  4. 类型:./manage.py迁移your_app --fake
  5. 这将立即将数据库中的内容与您的模型架构同步,而不会更改任何实际数据库
  6. 类型:./manage.py makemigrations your_app
  7. 类型:./manage.py迁移your_app

就是这样!一切都重新同步了。就像快速戳戳一样,我想说JavaScript很烂。谢谢。

答案 1 :(得分:0)

执行以下步骤应该可以解决您的问题。

  1. 备份数据库
  2. 存储您的更改(以便仅选择缺少的架构更改)
  3. 创建迁移(这将创建已应用的架构更改)
  4. 使用--fake运行迁移(这将伪造已完成的架构更改)
  5. 应用更改
  6. 创建迁移
  7. 运行迁移