Django迁移:如何使现有模型非抽象化?

时间:2015-05-20 11:40:04

标签: django database-migration

我有两个模型类Base和Derived(继承自Base),Base是抽象的。现在我意识到Base应该是具体的。如何创建为我进行切换的迁移?

目前我遇到的主要问题是Derived表中需要的base_ptr_id列,这是一个主键。必须添加此列并接收指向表Base中相应行的正确值。目前我正在进行这些迁移操作:

  1. 创建模型库
  2. 使用RunSQL将数据从Derived表复制到Base表。
  3. 将OneToOneField base_ptr添加到Derived with primary_key = False
  4. 使用RunSQL将id复制到base_ptr_id列
  5. 从Derived
  6. 中删除id列
  7. 将OneToOneField base_ptr更改为primary_key
  8. 从Derived中删除所有其他继承的字段
  9. 目前该过程在步骤3失败。看起来Django仍然创建了一个主键列base_ptr_id,该列失败,因为现有行具有相同的默认值。

    那我该怎么办?

1 个答案:

答案 0 :(得分:4)

更进一步,我提出了以下解决方案:

  1. 创建模型库
  2. 使用RunSQL将数据从Derived表复制到Base表。
  3. 将一个名为base_ptr的整数字段添加到Derived,其中primary_key = False,db_column ='base_ptr_id'
  4. 使用RunSQL将id复制到base_ptr_id列
  5. 从Derived
  6. 中删除id列
  7. 将base_ptr改为必需的OneToOneField,这也意味着是一个primary_key
  8. 从Derived中删除所有其他继承的字段
  9. 这种方式似乎有效。