Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

245
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!