Migrantion 是 Django 最有用的的特性之一,但是对于我来说改变 Model 这是一个很可怕的任务。尽管能够阅读文档,我仍然很害怕 migration 的冲突或者丢失数据,或者需要手动处理 migration 文件,或者这样那样的事情。事实上,一旦理解它们,migration 是很酷的、很有用的。关于以上的问题你将不会有任何疑问。

翻译自 Oana Ratiu 的《Django Migrations and How to Manage Conflicts

我一直不能找到一些有价值的文章和文档,也许在某个地方,所有的方法都可以解决冲突。然而从来没有人在 Google 上仔细的搜索。在这些问题上我会尝试收集一些不同角度。主要的是,我会尝试去解释你可以在项目中找到的那些 migrations,如何解决 migration 的冲突,和一些数据迁移的。我会假定你是有 Django、Python 和 GIT 的使用经验。

在 Django 的文档中对 migrations 的简单定义

Migrantion 是 Django 根据你的想法,改变 Model (添加字段、删除 Model 等)到数据库中的方法。它们大多数是自动的,但是你需要知道什么时候执行 migrations,执行它们时候,你可能会遇到的问题。

无论你选择是的 PostgreSQL, MySQL 还是 SQLite,你都可以使用一套命令去管理数据库。我将会较多的谈论关于 makemigrations 命令,它会基于你对 Model 的改动,然后创建新的 migrations。还有就是 migrate 命令,它会使 migrations 生效,完成后使它们失效和列出它们状态。

我的 migrations 在哪里?

在你的工程中,你可以找到 migrations 文件(.py 的文件)在 migrations 的文件夹里。确保文件夹中有 __init__.py 这个文件,如果没有这个文件,那么还是没有效果。

在你的 settings 文件中每个已安装的 app,你都可以找到对应得 migration 文件。例如,你可以在