2011-07-05 15 views
6

Tengo un proyecto existente que usa extensamente las migraciones del sur para cargar datos en sus tablas.Django 1.3 y migraciones del sur

Desde la actualización a Django 1.3, nuestras pruebas unitarias ya no se ejecutan porque no pueden encontrar los datos de los que dependen.

  1. ¿Este comportamiento es debido a one of the backwards incompatible changes en 1.3
  2. ¿Hay una manera fácil para que convierta todas estas migraciones en los accesorios?
+0

¿Quizás podría intentar eliminar la carpeta 'migrations' en cada directorio de la aplicación y ejecutar' ./manage.py schemamigration app --initial'? Haz una copia de seguridad de todo primero, porque esto puede funcionar o no. –

+0

Esto funcionaría para mis pruebas unitarias, ¡pero rompería mis sistemas de producción! –

Respuesta

3
  1. Sí, este comportamiento es debido a este cambio.

    Parece que hay una solución en el tronco sur (ver https://bitbucket.org/andrewgodwin/south/changeset/21a635231327) para que pueda probar la versión de desarrollo Sur (es bastante estable en mi experiencia).

  2. Usted puede tratar de cambiar el nombre de base de datos en la configuración (con el fin de conseguir ambiente limpio), ejecute ./manage.py syncdb y ./manage.py migrate y luego hacer ./manage.py dumpdata

+0

¡Esta es una gran respuesta! –

+0

Como en 2012-01-19, todavía no ha habido una versión sur con esa solución, pero puede instalarse al sur desde el tronco con: 'pip install hg + https: //bitbucket.org/andrewgodwin/south ' * Pero * - no soluciona el problema por lo que puedo decir ... – hwjp

0

llegué a este tema en la actualidad. Eventualmente terminé refactorizando mis migraciones para que usen funciones de ayuda para insertar los datos, y luego llamar a las mismas funciones desde el setUp() de mis pruebas.

Algunos consejos;

  • Haga sus funciones de ayuda toman la clase de modelo como un argumento, por lo que se les puede llamar con ORM [ 'yourapp.YourModel'] de la migración y con models.YourModel de la prueba. Eso también muestra la principal limitación: South funciona para los modelos cuyo esquema ha cambiado desde entonces, el código de prueba no puede hacer eso. Tuve suerte de que este modelo en particular no haya cambiado.

  • Si desea conservar los métodos de ayuda dentro de las migraciones, encontrará que no puede importar directamente yourapp.migrations.0001_some_migration porque los identificadores no pueden comenzar con números. Use algo como migration_0001 = importlib.import_module('yourapp.migrations.0001_some_migration') en lugar de un extracto de importación.

Cuestiones relacionadas