Opened 3 years ago
Last modified 4 months ago
#33586 new Bug
Cannot delete object with a foreign key dependency if the object also has a foreign key to a custom User model — at Initial Version
Reported by: | Jeremy Poulin | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 4.0 |
Severity: | Normal | Keywords: | |
Cc: | Simon Charette, Ülgen Sarıkavak | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | yes | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
I've created a reproducer app:
https://github.com/jaypoulz/rmigration_bug
After installing dependencies, run the repro.sh script:
https://github.com/jaypoulz/rmigration_bug/blob/main/repro.sh
All this script does is clear the db, run the initial migrations (which will fail because no user exists yet), create a dummy super user, re-run the migration so that it completes, and then run a reverse migration.
Object A has 2 ForeignKeys - the customer User and object B.
Object B is not important, but must exist in order to trigger the mismatch in 'Fake' model comparison during the delete call.
ValueError: Cannot query "A object (1)": Must be "A" instance.
This appears to be because delete first checks if any B instances need to be deleted (since it's a CASCADE on delete relationship).
Even though there are no instances of B, A cannot be deleted because the model type returned by A via model lookup is not the same as the model referenced by B.
For some reason, this only occurs when you have a custom User model.