mur*_*d99 2 python django django-models django-south
我的一个Django模型是一个子类,我想将其超类更改为与原始类非常相似的类.特别是,新的超类描述了相同的对象并具有相同的主键.如何让South创建新的OneToOne字段并将值从旧字段复制到新字段?
Elf*_*erg 11
在南方,有两种迁移:模式迁移和数据迁移.
创建schemamigration后,创建相应的数据迁移:
./manage.py datamigration <app> <migration_name>
不要运行迁移(尚未).而是打开刚刚创建的迁移文件.
你会发现名为的方法forwards().在此定义将旧表中的值复制到新表的过程.
如果您要将给定表的结构更改为更复杂的布局,则常见的方法是围绕数据迁移进行两次架构迁移:第一个架构迁移添加字段,数据迁移将旧字段转换为新字段,第二个架构迁移删除旧字段.forwards()只要您跟踪您正在访问的模式(先前或当前),您就可以使用该方法对数据库执行任何操作.通常,您只从orm.相关读取,并写入传统的Django访问器.
在南数据迁移教程涵盖这在一些细节上.它向您展示了如何使用South的orm引用在模式迁移之前使用模式访问数据库,并允许访问数据库,而Django不会抱怨它不理解的字段.
如果你正在重命名一个类,那可能会很棘手 - 它涉及创建新表,从一个表迁移到另一个表,以及删除旧表.South可以做到这一点,但通过移动模式和数据迁移可能需要不止一次.
South还有一个backwards()方法,它允许您将数据库表返回到上一步.在某些情况下,这可能是不可能的; 新表可能会记录在降级时丢失的信息.backwards()如果您没有处于DEBUG模式,我建议使用抛出异常.
| 归档时间: |
|
| 查看次数: |
1922 次 |
| 最近记录: |