2012-01-13 17 views
12

Tengo un proyecto de Django que comenzó como una importación de una base de datos heredada. Debido a esto, hay un modelo con una clave primaria compuesta. Esto funcionó siempre que use solo los datos heredados, pero ahora quiero agregar nuevos datos y el formulario que creé me dice que estoy tratando de insertar datos duplicados, presumiblemente porque solo está mirando uno de los campos como el Clave primaria.¿Agregar el campo Aumento automático al modelo existente con Django South?

Ahora quiero cambiar el modelo para usar una clave primaria de autoincrement, como una Django que se agregará automáticamente. Traté de eliminar los atributos de la clave principal de los campos y ponerlos en unique_together en la clase Meta interna. Cuando ejecuté schemamigration con South, quería agregar un campo id como se esperaba, pero pedía un valor predeterminado.

¿Cómo puedo especificar que South debe asignar claves únicas de alguna manera que sea razonable para un campo de autoincrement? (es decir, asigne la secuencia [1 ... n] a algún orden arbitrario de los registros)

Si esto es imposible, ¿hay alguna otra manera de lograr lo mismo, preferiblemente usando Django y South?

Respuesta

5

He resuelto el problema de que me obligó a hacer esto con una solución:

he copiado los datos de la tabla original en una tabla temporal en SQL con INSERT INTO... SELECT.... Luego borré la tabla original y la recreé con el campo autoincrement. Luego volví a copiar los datos en la nueva tabla, con los valores de autoincrement agregados automáticamente por el comando INSERT. Finalmente ejecuté una ejecución falsa de la migración del Sur para hacer que las tablas de South fueran consistentes con el nuevo esquema.

Cuestiones relacionadas