Django South: 从另一张表迁移外键

1 投票
1 回答
525 浏览
提问于 2025-04-16 21:14

我在做一个系统,表的设计是这样的:

Table A:
   - ID
   - ForeignKey(C)

Table B:
   - ID
   - ForeignKey(A)

Table C:
   - ID

由于一些需求的变化,我需要把外键(C)从表A移动到表B,所以变成这样:

Table A:
    - ID

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

-Table C:
    - ID

这个表结构的迁移很简单。但是上次我在表A里已经有了一些现存的外键数据,我不能直接删除这些数据。我需要把这些外键迁移到表B。表B的结构和里面的数据都不一样。当我在表B的模型中添加外键(C)时,South工具要求我提供一个默认值,因为我没有提供默认值,而且它不允许为空。我的选择是退出结构迁移,手动添加默认值,或者提供一个一次性的值。

我的问题是,如何使用South工具从表A中导入现有数据并添加默认值或一次性值呢?我搜索了类似的问题,但没有找到解决办法 :(

谢谢。

1 个回答

6

在进行这种类型的迁移时,我通常会创建三个步骤:

  1. 创建一个新字段
  2. (数据迁移)将旧字段的数据复制到新字段中(可能会进行一些转换)
  3. 删除旧字段

这样,我可以利用South工具的自动迁移功能来处理第一步和第三步,只需要写一些简单的转换代码。这就像在South教程中的这个例子一样。

撰写回答