2010-11-12 15 views
11

Estoy trabajando con un proyecto de sistema operativo que usa South para migrar la base de datos. Estoy construyendo una nueva base de datos desde cero y quiero asegurarme de que South esté configurada para que pueda actualizar fácilmente la base de datos en el futuro.¿Cómo creo una nueva base de datos para una aplicación existente usando Django South y establezco valores predeterminados?

parece que este proceso debe ser:

  1. el DB
  2. syncdb
  3. migran

Sin embargo, cuando trato de migrar las bases de datos, una de las migraciones del anteriores (migración 0004 y van a 0009) arroja una excepción:

ValueError: You cannot add a null=False column without a default value. 

No entiendo cómo agregar un valor predeterminado a la migración 0004 por lo que esta excepción no se produce.

No es necesario ejecutar las migraciones porque la base de datos está vacía. Sin embargo, south_migrationhistory debe contener una lista de todas las migraciones y cuándo se aplicaron.

Intenté hackearlo y simplemente agregar migration 0009 a la base de datos manualmente, pero esto arrojó otro error porque las migraciones intermedias no se habían ejecutado. También intenté agregar un campo a la base de datos para ver si podía encontrar la sintaxis de add_column con un valor predeterminado de 0. El formato se ve totalmente diferente de estas migraciones anteriores.

Estas son las 2 versiones diferentes de la sintaxis add_column:

#0004 syntax: 
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size']) 
#0009 syntax: 
syntax db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) 

Por lo tanto, supongo que hubo un cambio en el código del Sur entre 0004, cuando se creó y hoy.

¿Hay alguna manera de compilar la base de datos con syncdb y actualizar de alguna manera south_migrationhistory sin ejecutar manage.py migrate?

Si tiene una aplicación existente con migraciones del sur, ¿cómo crearía una nueva base de datos desde cero?

No puedo migrar porque no hay un conjunto predeterminado en un campo entero. ¿Cómo configuro un valor predeterminado en una migración anterior? El campo ya no existe.

sintaxis intentaron:

db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'], {'default': 0}) 
#throws ValueError: You cannot add a null=False column without a default value. 
db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) 
#throws AttributeError: Migration instance has no attribute 'gf' 

estoy usando Sur-0.7.2-py2.7.huevo

Respuesta

16

Andrew Godwin proporciona una respuesta:

Sí, utilice:

./manage.py syncdb --all 

a continuación:

./manage.py migrate --fake 

Esto, sin embargo, también caso omiso de cualquier migraciones que se suman en los datos de la base de datos.

Cuestiones relacionadas