#33022: main-random test failures (build #8):
field_deconstruction.tests.FieldDeconstructionTests and
migrations.test_commands.MigrateTests
--------------------------------+------------------------------------
Reporter: Chris Jerdonek | Owner: nobody
Type: Bug | Status: new
Component: Migrations | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+------------------------------------
Comment (by Jacob Walls):
Reiterating from above PR:
The pair of migrations tests that produces a failure is:
- `test_custom_user`
- `test_migrate_partially_applied_squashed_migration`
Can be produced with:
{{{
./tests/runtests.py migrations.test_commands.MigrateTests
migrations.test_executor.ExecutorTests -k test_custom_user -k
test_migrate_partially --shuffle 1022528553
}}}
The failure occurs during the `migrate` (to zero) command in the `finally`
block with:
{{{
raise ValueError("\n".join(error.msg for error in errors))
ValueError: The field migrations.Book.author was declared with a lazy
reference to 'auth.user', but app 'auth' isn't installed.
}}}
`test_custom_user` overrides the `AUTH_USER_MODEL` setting like so:
{{{
AUTH_USER_MODEL="migrations.Author",
}}}
[https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#changing-
to-a-custom-user-model-mid-project Documentation] for the setting says
that it's cumbersome to change this after migrations have been made:
> Changing AUTH_USER_MODEL after you’ve created database tables is
significantly more difficult since it affects foreign keys and many-to-
many relationships, for example. This change can’t be done automatically
and requires manually fixing your schema, moving your data from the old
user table, and possibly manually reapplying some migrations. See #25313
for an outline of the steps.
This makes sense, because in the ordinary test execution order, the
squashed migration in `test_migrate_partially_applied_squashed_migration `
creates a `Book.Author` field like this:
` ('author', models.ForeignKey(null=True,
on_delete=django.db.models.deletion.SET_NULL, to='migrations.author')),`
But in the failing test order, instead creates this:
` ('author', models.ForeignKey(null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL)),`
Since the documentation mentions this is cumbersome to address, the
thought in the PR was just to keep all tests running on the app
"migrations" with the same `AUTH_USER_MODEL`, but if that's not
satisfactory, is the idea that we should rewrite
`test_migrate_partially_applied_squashed_migration` to use a different app
to run the test cases? Otherwise I'm not sure how to prevent
`squashmigrations` from picking up the swappable user model.
Thanks, and happy to keep digging if helpful.
--
Ticket URL: <https://code.djangoproject.com/ticket/33022#comment:9>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/067.371e578bda0b83920ef923f240ef2ce2%40djangoproject.com.