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

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

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 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!