从其他列获取南迁默认值?

5 投票
1 回答
2607 浏览
提问于 2025-04-17 01:08

我现在有一个模型,里面有一列叫做 description,这个列会在网站的几个不同页面上显示内容。客户希望把这个列拆分成几个不同的列,这样他们就可以在网站的特定部分填入不同的值。所以我需要把 description 这列改成 frontpage_descriptionresourcepage_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'),我在想有没有办法把 descriptionfrontpage_description 的值设置为 resourcepage_description 的默认值?

我查过 orm 参数,它确实可以让你在迁移时访问模型,但我看到的例子大多是用来定义迁移过程中的关系,而不是实际访问单个记录。

难道我必须把这个拆分成一个模式迁移和一个数据迁移吗?

1 个回答

1

这其实分为三个步骤:第一步是修改数据库结构,添加新的列;第二步是迁移数据,把这些新列填上数据;第三步是再修改一次数据库结构,删除原来的 description 列。大部分工作其实已经通过 ./manage 命令帮你完成了,所以并不是说这会增加很多额外的工作量。

撰写回答