#36639 new Cleanup/optimization

Add CI step to run makemigrations --check against test models

Reported by: Jacob Walls Owned by:
Component: Core (Other) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When adjusting or adding test models, it is easy to overlook adding changes to the migration files.

We could add some sort of CI check for this. We'd want a script, not changes in django.test, but here's a dirty version just to surface the failures. It doesn't work with the parallel runner.

  • django/test/testcases.py

    diff --git a/django/test/testcases.py b/django/test/testcases.py
    index c587f770a6..b33d2cf627 100644
    a b class TransactionTestCase(SimpleTestCase):  
    11321132            cls._pre_setup()
    11331133            cls._pre_setup_ran_eagerly = True
    11341134
     1135        try:
     1136            call_command("makemigrations", "--check", verbosity=0)
     1137        except SystemExit:
     1138            call_command("makemigrations", "--check", verbosity=3)
     1139            raise
     1140
    11351141    @classmethod
    11361142    def tearDownClass(cls):
    11371143        super().tearDownClass()

Gives as of 2514857e3fae831106832cca8823237801cf2cad:

Migrations for 'db_functions':
  db_functions/migrations/0003_article_id_author_id_decimalmodel_id_dtmodel_id_and_more.py
    + Add field id to article
    + Add field id to author
    + Add field id to decimalmodel
    + Add field id to dtmodel
    + Add field id to fan
    + Add field id to floatmodel
    + Add field id to integermodel
Full migrations file '0003_article_id_author_id_decimalmodel_id_dtmodel_id_and_more.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('db_functions', '0002_create_test_models'),
    ]

    operations = [
        migrations.AddField(
            model_name='article',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AddField(
            model_name='author',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AddField(
            model_name='decimalmodel',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AddField(
            model_name='dtmodel',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AddField(
            model_name='fan',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AddField(
            model_name='floatmodel',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AddField(
            model_name='integermodel',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
    ]
Migrations for 'migration_test_data_persistence':
  migration_test_data_persistence/migrations/0003_unmanaged_alter_book_id.py
    + Create model Unmanaged
    ~ Alter field id on book
Full migrations file '0003_unmanaged_alter_book_id.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('migration_test_data_persistence', '0002_add_book'),
    ]

    operations = [
        migrations.CreateModel(
            name='Unmanaged',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=100)),
            ],
            options={
                'managed': False,
            },
        ),
        migrations.AlterField(
            model_name='book',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
    ]
Migrations for 'postgres_tests':
  postgres_tests/migrations/0003_alter_withsizearraymodel_field.py
    ~ Alter field field on withsizearraymodel
Full migrations file '0003_alter_withsizearraymodel_field.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27

import postgres_tests.fields
from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('postgres_tests', '0002_create_test_models'),
    ]

    operations = [
        migrations.AlterField(
            model_name='withsizearraymodel',
            name='field',
            field=postgres_tests.fields.DummyArrayField(base_field='', default=None, size=1),
            preserve_default=False,
        ),
    ]
Migrations for 'sites_framework':
  sites_framework/migrations/0002_alter_customarticle_managers_and_more.py
    ~ Change managers on customarticle
    ~ Change managers on exclusivearticle
    ~ Change managers on syndicatedarticle
    ~ Alter field id on customarticle
    ~ Alter field id on exclusivearticle
    ~ Alter field id on syndicatedarticle
Full migrations file '0002_alter_customarticle_managers_and_more.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27

import django.contrib.sites.managers
import django.db.models.manager
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('sites_framework', '0001_initial'),
    ]

    operations = [
        migrations.AlterModelManagers(
            name='customarticle',
            managers=[
                ('objects', django.db.models.manager.Manager()),
                ('on_site', django.contrib.sites.managers.CurrentSiteManager('places_this_article_should_appear')),
            ],
        ),
        migrations.AlterModelManagers(
            name='exclusivearticle',
            managers=[
                ('objects', django.db.models.manager.Manager()),
                ('on_site', django.contrib.sites.managers.CurrentSiteManager()),
            ],
        ),
        migrations.AlterModelManagers(
            name='syndicatedarticle',
            managers=[
                ('objects', django.db.models.manager.Manager()),
                ('on_site', django.contrib.sites.managers.CurrentSiteManager()),
            ],
        ),
        migrations.AlterField(
            model_name='customarticle',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AlterField(
            model_name='exclusivearticle',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
        migrations.AlterField(
            model_name='syndicatedarticle',
            name='id',
            field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
        ),
    ]

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top