南迁移默认值来自其他列?

时间:2011-09-01 18:37:29

标签: python django django-south

我的模型现在有一列description,它填充了网站几个不同页面上的区域。客户希望将其拆分为几个不同的列,以便他们可以在站点的某些部分填充不同的值。因此,我必须将description列更改为frontpage_descriptionresourcepage_description。我试图想出一种在南方执行此操作的方法,以便description列的值是两个“新”列的(初始)默认值。这就是我到目前为止所做的:

# file: project/app/xxxx_mymigration.py
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models

class Migration(SchemaMigration):
    def forwards(self, orm):
        db.rename_column('myapp', 'description', 'frontpage_description')
        db.add_column('myapp', 'resourcepage_description', self.gf('myfields.TextField')(default='CHANGEME'), keep_default=False)

    def backwards(self, orm):
        db.rename_column('myapp', 'frontpage_description', 'description')
        db.delete_column('myapp', 'resourcepage_description')

    models = {
        # ...

我想知道的部分是self.gf(...)(default='CHANGEME'),我想知道是否有办法将descriptionfrontpage_description的值设置为{{1}的默认值}}?

我查看了resourcepage_description参数,它允许您在迁移期间访问模型,但我遇到的所有示例都涉及使用它来定义迁移期间的关系,而不是实际访问单个记录

我是否只需要将其拆分为模式迁移和数据迁移?

1 个答案:

答案 0 :(得分:2)

这正是一个三步骤:用于添加列的架构迁移,用于设置列的数据迁移以及用于删除原始description列的另一个架构迁移。 90%的内容是通过./manage命令为您完成的,因此不会有更多的工作。