【问题标题】:Django migrations gives error when run separately in different machinesDjango 迁移在不同机器上单独运行时出错
【发布时间】:2017-01-27 15:21:01
【问题描述】:

我们是一个致力于 Django 项目的开发人员团队。我们正面临 django 迁移的问题。如果一位开发人员对模型进行更改并运行 makemigrations>migrate sequence 它会在迁移目录中生成一些 sql。现在,当其他开发人员提取代码并运行相同的序列时,它会将代码置于错误状态。我们一直在本地清除迁移目录以解决问题,有时还会清除所有数据。不确定我们做错了什么。请建议使用 django 迁移的正确方法。

注意 - 我们所有人都在本地机器中使用单独的 DB 实例。

【问题讨论】:

  • 你应该显示你遇到了什么错误。
  • 你使用的是什么数据库和Django版本?
  • @DanielRoseman,错误不断变化 - 现在我得到这个 - 返回 self.cursor.execute(sql) django.db.utils.ProgrammingError: 关系“django_content_type”已经存在我可以看到有一些关于假初始的建议,这似乎对我不起作用。我相信我们在使用迁移的方式上遇到了一些基本问题——我想知道我们是否正确地使用了 django 迁移。
  • @Aison,我正在使用 postgres v 9.5.4 和 Django v 1.10
  • 好吧,你一直在通过“在本地清除我们的迁移目录”让自己陷入困境。不要那样做。问题是,现在你已经完成了,你完全不同步了。

标签: django django-models django-migrations


【解决方案1】:

ma​​kemigrations 只是创建文件

通过运行 makemigrations,您是在告诉 Django 您已经对模型进行了一些更改(在本例中,您已经进行了新的更改)并且您希望将这些更改存储为迁移。

迁移是 Django 将更改存储到您的模型(以及您的数据库架构)的方式——它们只是磁盘上的文件。如果您愿意,可以阅读新模型的迁移;这是文件 polls/migrations/0001_initial.py。

在版本控制下,在您推送迁移文件后,例如 0001_initial.py。其他开发者只需拉取文件然后运行

python manage.py sqlmigrate your_app 0001 # to see what happen

python manage.py migrate your_app 0001

有关版本控制的更多信息:

版本控制

由于迁移存储在版本控制中,您偶尔会遇到这样的情况:您和另一位开发人员同时向同一个应用提交了迁移,导致两次迁移的编号相同。

别担心 - 这些数字仅供开发人员参考,Django 只关心每个迁移有不同的名称。迁移在文件中指定了它们依赖的其他迁移(包括同一应用中的早期迁移),因此可以检测到同一应用何时有两个未排序的新迁移。

当这种情况发生时,Django 会提示你并给你一些选项。如果它认为它足够安全,它将为您自动线性化这两个迁移。如果没有,您必须自己修改迁移 - 不用担心,这并不难,下面的迁移文件中有详细说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2020-01-06
    • 1970-01-01
    • 2018-04-25
    • 2021-04-12
    • 2015-07-26
    • 2015-08-12
    • 2016-12-29
    相关资源
    最近更新 更多