ultimo - No existe tal error de columna en la aplicación Django después de la migración al sur
politica migratoria de estados unidos 2018 (2)
Me he topado con el mismo problema presentado por el comentarista aquí: Django South: la tabla ya existe
No hubo seguimiento, así que pensé en publicar una nueva pregunta. Tengo una aplicación Django cuyas migraciones gestiono con South. Agregué un campo a mi modelo y luego corrí.
./manage schemamigration my_app --auto
que funcionó como se esperaba. Corriendo
./manage migrate my_app
sin embargo, dio como resultado un error que indica que la tabla asociada con el modelo que cambié ya existe. Esto me llevó a la pregunta anterior, así que correr
./manage migrate my_app --fake
resolvió el error de la tabla, pero ahora obtengo un error de Django de que la columna asociada con el nuevo campo no existe.
./manage sqlall my_app
Muestra que el esquema es el esperado.
Cualquier pensamiento sobre cómo remediar esto es apreciado!
Otra cosa a la que debe prestar atención: a menudo recibirá este error ( DatabaseError: no such column: appname_model.fieldname
) si está usando un valor default
en una relación ForeignKey
y agrega un campo a ese modelo FK.
Algo como (en tus models.py
):
class MyAppModel(models.Model):
my_foreign_key = models.ForeignKey(FkModel,
default=lambda: FkModel.objects.get(id=1),
null=True)
Luego, en una nueva migración, agrega un nuevo campo a su FkModel:
class FkModel(models.Model):
new_field = models.IntegerField(''New Field Name'', blank=True, null=True)
Recibirá un error cuando ejecute un schemamigration
del schemamigration
:
DatabaseError: no such column: myappmodel_fkmodel.new_field
Puede resolver esto asegurándose de que su migración inicial al Sur incluya esta función lambda
valor predeterminado, y luego elimine el valor predeterminado en la próxima migración.
Esto me ha mordido en el pasado. Esperemos que ayude a alguien en el futuro.
Probablemente la forma más fácil para usted será comenzar las migraciones desde cero.
Elimine todas las migrations/*
archivos de la aplicación que intenta arreglar. Restaure models.py
al estado que se encuentra en este momento en la base de datos (con la ayuda de las herramientas de control de versiones, o simplemente comente los nuevos campos). Luego inicialice las migraciones:
manage.py migrate my_app --delete-ghost-migrations
manage.py schemamigration my_app --init
manage.py migrate my_app --fake
Esto creará un registro en las migraciones de cómo se ve la estructura actual de la base de datos.
Ahora agregue sus cambios a models.py
y south ahora lo que ha cambiado:
manage.py schemamigration my_app --auto
manage.py migrate my_app