Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

246
Vistas
¿Cómo agregar un nuevo campo en el modelo después de la migración personalizada que accede al modelo antes del nuevo campo?

Tengo un archivo de migración personalizado que crea una entrada en la tabla de usuarios. El proyecto de trabajo inicial tiene estas migraciones:

 1. 001_initial.py # creates model with some fields 2. 002_custom_user_data.py # adds data in "user" due some middle requirement after some time.

Ahora quiero agregar una columna más a esta tabla como " config_data ". Para esto, he seguido los siguientes pasos:

 1. python manage.py makemigrations <app-name> # creates one more migration file` 003_add_config_data_field.py 2. python manage.py migrate # raise an error

El comando de migración genera el siguiente error.

 Applying my_user.001_initial.py... OK Applying my_user.002_custom_user_data.py ...Traceback (most recent call last): File "/home/myhome/.local/share/virtualenvs/myproject/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) psycopg2.errors.UndefinedColumn: column my_user.config_data does not exist LINE 1: ..., "my_user"."address",

Esto se debe a que la migración 002 intenta acceder a la tabla my_user antes de que se migre la migración del campo agregado (003) en la tabla, lo que genera un error de datos de configuración de columna indefinida.

Cualquier idea de cómo se puede resolver esto, ya que estas migraciones deberían funcionar para la base de datos nueva, así como para la producción de dB en la que hasta 002 se migró antes.

A continuación se muestra la migración de 002_custom_user_data.py

 # Generated by Django 3.2.2 from django.db import migrations from myapp.models import MyUser def create_user(apps, schema_editor): user = MyUser.objects.get_or_create(id=123) user.address = 'demo' user.save() def delete_user(apps, schema_editor): MyUser.objects.filter(id=123).delete() class Migration(migrations.Migration): dependencies = [ ('my_user', '001_initial'), ] operations = [ migrations.RunPython(create_user, delete_user, elidable=True) ]

Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe importar el modelo histórico , no su modelo actual. Django realiza un seguimiento de cómo se ve el modelo antes de ejecutar esa migración, puede acceder a dicho modelo con el apps.get_model(…) [Django-doc] :

 from django.db import migrations # No import from myapp.models! def create_user(apps, schema_editor): MyUser = apps.get_model('my_user', 'MyUser') user = MyUser.objects.get_or_create(id=123) user.address = 'demo' user.save() def delete_user(apps, schema_editor): MyUser = apps.get_model('my_user', 'MyUser') MyUser.objects.filter(id=123).delete() class Migration(migrations.Migration): dependencies = [ ('my_user', '001_initial'), ]

El modelo MyUser que usamos aquí no tendrá per se todos los campos del que defina en models.py , ni los campos per se tendrán el mismo tipo. Por lo tanto, aquí puede trabajar con el modelo como era en ese momento y, por lo tanto, definir migraciones de datos . Los registros se actualizarán más tarde si creó un campo adicional, por ejemplo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda