我怎样才能在不丢失任何数据的情况下完全改变我的 Django 数据库模式?

How can I completely alter my Django database schema without losing any data?

我正在对我的数据库架构进行一些重大更改,但我不想在迁移到新架构的过程中丢失任何数据。让我举一个具体的例子。我目前有一个 class Person(models.Model),每个 Person 实例都有一堆数据与之关联,例如 nameage 等。已经有很多 Person 我的数据库中的实例。我现在意识到我实际上需要两种类型的 Person,一种 Student 和一种 Teacher,并且每种类型都有自己独特的变量和方法。在我看来,实现此目标的最佳方法是使 Person 成为抽象 class 并使 StudentTeacher 扩展 class。 Person 中的一些变量目前仅适用于 Student,所以我想将这些变量移动到 Student subclass.

一般来说,我怎样才能在不丢失任何数据的情况下进行此迁移?我是 Django 的新手,所以我真的不知道从哪里开始,除了我可能需要编写某种自定义脚本以 运行 和 python manage.py.

您要查找的是 Django data migrations

  1. abstract = True 添加到您的人物元模型
  2. 添加您的 StudentTeacher 模型并让它们继承自 Person
  3. 运行 manage.py makemigrations
  4. 由此产生的迁移将包含添加新模型和删除 Person 的操作。您的自定义数据迁移操作需要在创建之后和删除之前进行。按照迁移 Person 模型上的名称字段的 Django 文档示例,而是为每个人创建新的 StudentTeacher 模型的实例。请务必保存新实例。

其他提示:

  1. 使用fixtures备份您的数据,以便您轻松恢复 万一您在迁移过程中犯了错误
  2. 最好重新命名您的新特殊迁移,以便您将来更容易识别它