South migration default value from other column?
I have a model that has one column right now, description
, that populates an area on a few different pages of the site. The client wants this split up into a couple different columns, so they can populate different values in certain parts of the site. So I have to change that description
column to frontpage_description
and resourcepage_description
. I am trying to come up with a way to do this in South so that the value of the description
column is the (initial) default value for both of the "new" columns. This is what I have so far:
# 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 = 开发者_JAVA技巧{
# ...
The part I am wondering about is the self.gf(...)(default='CHANGEME')
, I am wondering if there is a way to set the value of description
or frontpage_description
to be the default value for resourcepage_description
?
I have looked into the orm
parameter, which does allow you to access models during the migration, but all the examples I have come across involve using it to define relations during a migration, and not actually accessing individual records.
Am I just going to have to split this up into a schemamigration and a datamigration?
This is exactly a three-step: schema migration to add the columns, a data migration to set them, and another schema migration to delete the original description
column. 90% of that is done for you from the ./manage
command, so it's not as if this is tragically more work.
精彩评论