我有一个现在有一列的模型description,它填充了网站几个不同页面上的一个区域.客户希望将其拆分为几个不同的列,以便他们可以在站点的某些部分填充不同的值.所以我必须将该description列更改为frontpage_description和resourcepage_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 = {
# ...
Run Code Online (Sandbox Code Playgroud)
我想知道的部分是self.gf(...)(default='CHANGEME'),我想知道是否有办法设置值description或者frontpage_description是默认值resourcepage_description?
我查看了orm参数,它允许您在迁移期间访问模型,但我遇到的所有示例都涉及使用它来定义迁移期间的关系,而不是实际访问单个记录.
我是否只需要将其拆分为模式迁移和数据迁移?
这实际上是一个三步:用于添加列的架构迁移、用于设置列的数据迁移以及用于删除原始description列的另一个架构迁移。90% 的工作是通过命令为您完成的./manage,因此这并不是可悲的更多工作。