2011-09-01 10 views
5

Tengo un modelo que tiene una columna en este momento, description, que rellena un área en algunas páginas diferentes del sitio. El cliente quiere dividir esto en un par de columnas diferentes, de modo que puedan poblar valores diferentes en ciertas partes del sitio. Así que tengo que cambiar esa columna description a frontpage_description y resourcepage_description. Estoy tratando de encontrar una forma de hacer esto en el sur para que el valor de la columna description sea el valor predeterminado (inicial) para las dos columnas "nuevas". Esto es lo que tengo hasta ahora:¿Valor predeterminado de migración sur desde otra columna?

# 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 = { 
     # ... 

La parte que me gustaría saber es el self.gf(...)(default='CHANGEME'), me pregunto si hay una manera de establecer el valor de description o frontpage_description a ser el valor por defecto para resourcepage_description?

He examinado el parámetro orm, que le permite acceder a los modelos durante la migración, pero todos los ejemplos que he encontrado implican usarlo para definir relaciones durante una migración y no acceder realmente a registros individuales.

¿Tendré que dividir esto en una migración de esquema y una migración de datos?

Respuesta

2

Esto es exactamente una migración de esquema de tres pasos para agregar las columnas, una migración de datos para establecerlas y otra migración de esquema para eliminar la columna original description. El 90% de eso se hace por usted desde el comando ./manage, por lo que no es como si esto fuera trágicamente más trabajo.

+1

Sí, me di cuenta de lo que me estaba perdiendo poco después de publicar aquí: - /. En realidad, es un proceso de 2 pasos, porque puedo ejecutar 'db.rename_column' y solo agregar 1 columna, y luego ejecutar la migración de datos para las dos columnas. –

Cuestiones relacionadas