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