从其他列获取南迁默认值?
我现在有一个模型,里面有一列叫做 description
,这个列会在网站的几个不同页面上显示内容。客户希望把这个列拆分成几个不同的列,这样他们就可以在网站的特定部分填入不同的值。所以我需要把 description
这列改成 frontpage_description
和 resourcepage_description
。我正在想办法用 South 来实现这个改动,让 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')
,我在想有没有办法把 description
或 frontpage_description
的值设置为 resourcepage_description
的默认值?
我查过 orm
参数,它确实可以让你在迁移时访问模型,但我看到的例子大多是用来定义迁移过程中的关系,而不是实际访问单个记录。
难道我必须把这个拆分成一个模式迁移和一个数据迁移吗?
1 个回答
1
这其实分为三个步骤:第一步是修改数据库结构,添加新的列;第二步是迁移数据,把这些新列填上数据;第三步是再修改一次数据库结构,删除原来的 description
列。大部分工作其实已经通过 ./manage
命令帮你完成了,所以并不是说这会增加很多额外的工作量。