2011-09-01 13 views
5

Ho un modello che ha una colonna in questo momento, description, che popola un'area su alcune diverse pagine del sito. Il cliente vuole che questo divida in un paio di colonne diverse, in modo che possano popolare valori diversi in alcune parti del sito. Quindi devo cambiare la colonna description in frontpage_description e resourcepage_description. Sto cercando di trovare un modo per farlo in Sud in modo che il valore della colonna description sia il valore predefinito (iniziale) per entrambe le "nuove" colonne. Questo è quello che ho finora:Valore predefinito di migrazione sud da un'altra colonna?

# 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 mi chiedo è di circa il self.gf(...)(default='CHANGEME'), mi chiedo se c'è un modo per impostare il valore di description o frontpage_description essere il valore di default per resourcepage_description?

Ho esaminato il parametro orm, che consente di accedere ai modelli durante la migrazione, ma tutti gli esempi che ho incontrato implicano l'utilizzo di esso per definire le relazioni durante una migrazione e non accedere effettivamente ai singoli record.

Devo dividerlo in uno schemamigration e una datamigration?

risposta

2

Questo è esattamente un tre passaggi: migrazione dello schema per aggiungere le colonne, una migrazione dei dati per impostarle e un'altra migrazione dello schema per eliminare la colonna originale description. Il 90% di questo viene fatto per te dal comando ./manage, quindi non è come se questo fosse tragicamente più lavoro.

+1

sì, mi sono reso conto di ciò che mi mancava poco dopo aver postato qui: - /. In realtà è un processo in due passaggi, perché posso eseguire 'db.rename_column' e aggiungere solo 1 colonna, quindi eseguire la datamigration per le due colonne. –

Problemi correlati