Django South:从另一张桌子迁移FK

时间:2011-07-11 06:50:35

标签: python django migration django-south

我正在做一些系统,我的桌面设计是这样的:

Table A:
   - ID
   - ForeignKey(C)

Table B:
   - ID
   - ForeignKey(A)

Table C:
   - ID

由于一些需求变化,我需要将ForeignKey(C)从A移动到B,所以它是这样的:

Table A:
    - ID

Table B:
    - ID
    - ForeignKey(A)
    - ForeignKey(C)

-Table C:
    - ID

架构迁移很简单。但是上次我已经在表A中有一些现有的FK数据。我不能马上删除它。我需要将这个FK迁移到表B.B的结构和它的内部数据是不同的。当我将ForeignKey(C)添加到B的模型时,South要求我提供默认值,因为我没有提供任何默认值,并且它不允许NULL。选择是退出schemamigration并手动添加默认值或提供一次性值。

我的问题是,如何使用South?添加从表A中的现有数据导入的默认/ 1时间值?我正在寻找这个类似的问题,但没有运气:(

感谢。

1 个答案:

答案 0 :(得分:6)

进行此类迁移时,我总是创建3次迁移:

  1. 创建新字段
  2. (数据迁移)将数据从旧字段复制到新字段(可能带有转换)
  3. 删除旧字段
  4. 这样我可以使用来自南方的auto schemamigration进行第一次和第三次迁移,只需编写一些简单的转换代码。这与南方教程中的this example类似。