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

301
Vistas
¿Migraciones automáticas innecesarias en Django?

ejecutando python 3.6 y Django 3.1.7!

Entonces tengo un proyecto Django con una aplicación con modelos como los siguientes:

 class Department(models.Model_: name = models.CharField(max_length=255) class Person(models.Model): first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) department = models.ForeignKey( Department, related_name="department_members", on_delete=models.CASCADE )

Cuando ejecuto makemigrations obtengo esto en 0001_initial.py :

 class Migration(migrations.Migration): initial = True operations = [ migrations.CreateModel( name='Person', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('first_name', models.CharField(max_length=255)), ('last_name', models.CharField(max_length=255)), ], ), migrations.CreateModel( name='Department', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ], ), migrations.AddField( model_name='person', name='department', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='department_members', to='my_app.department'), ), ]

Eso está muy bien, pero ahora he estado recibiendo este texto rojo:

 Your models have changes that are not yet reflected in a migration, and so won't be applied.
 Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

Cuando ejecuto makemigrations nuevamente, obtengo esto como 0002_auto_20211111_1116.py :

 class Migration(migrations.Migration): dependencies = [ ('my_app', '0001_initial'), ] operations = [ migrations.AlterField( model_name='Department', name='id', field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), ), migrations.AlterField( model_name='Person', name='id', field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), ), ]

No he realizado cambios en models.py y tampoco puedo ver una diferencia en el campo 'id' que se modifica en la migración automática.

Siempre podría dejar 0002 en la carpeta y seguir con mi vida, pero realmente me ha estado molestando. ¿Qué le está dando a Django la señal de que algo ha cambiado en mis modelos? ¿Cómo evitar tener que crear esa segunda migración?

¡Gracias!

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

0

Migra las claves principales de BigAutoField s a AutoField s. Probablemente la razón de esto es que desde django-3.2 , la configuración DEFAULT_AUTO_FIELD [Django-doc] se agrega a la configuración. Si así especificó para esa configuración:

 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

Entonces Django usará un BigAutoField .

Si luego volvió a migrar a django-3.1 , entonces Django no tuvo en cuenta la configuración DEFAULT_AUTO_FIELD y utilizará AutoField . Dado que no menciona la clave principal explícitamente, esto significa que se supone que usa un AutoField y, por lo tanto, migrará los campos a un AutoField .

Si no desea esto, puede eliminar el archivo de migración y definir explícitamente los campos de id con:

 class Department(models.Model): id = models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name='ID' ) name = models.CharField(max_length=255) class Person(models.Model): id = models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name='ID' ) first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) department = models.ForeignKey( Department, related_name="department_members", on_delete=models.CASCADE )
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