#32743 closed Bug (fixed)
Migrations don't alter foreign key data types when referencing primary keys in MTI models.
Reported by: | Mariusz Felisiak | Owned by: | David Wobrock |
---|---|---|---|
Component: | Migrations | Version: | 3.2 |
Severity: | Normal | Keywords: | |
Cc: | David Wobrock | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Migrations don't alter foreign key data types when referencing primary keys in MTI models, e.g.
- before state:
class Parent(models.Model): pass class Child(Parent): pass class MainModel(models.Model): child = models.ForeignKey(Child, models.CASCADE)
- after state:
class Parent(models.Model): id = models.BigAutoField(primary_key=True)
makemigrations
generates a single operation:
migrations.AlterField( model_name='parent', name='id', field=models.BigAutoField(primary_key=True, serialize=False), ),
which doesn't change MainModel.child
's datatype:
$ python manage.py sqlmigrate test_two 0002 -- -- Alter field id on parent -- ALTER TABLE `test_two_child` DROP FOREIGN KEY `test_two_child_parent_ptr_id_537e8ba7_fk_test_two_parent_id`; ALTER TABLE `test_two_parent` MODIFY `id` bigint AUTO_INCREMENT NOT NULL; ALTER TABLE `test_two_child` MODIFY `parent_ptr_id` bigint NOT NULL; ALTER TABLE `test_two_child` ADD CONSTRAINT `test_two_child_parent_ptr_id_537e8ba7_fk` FOREIGN KEY (`parent_ptr_id`) REFERENCES `test_two_parent` (`id`);
and throws an error on MySQL:
MySQLdb._exceptions.OperationalError: (3780, "Referencing column 'child_id' and referenced column 'parent_ptr_id' in foreign key constraint 'test_two_mainmodel_child_id_3ca4683f_fk_test_two_' are incompatible.")
I couldn't find an existing ticket.
Noticed when checking #32742.
Change History (6)
comment:1 by , 3 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 3 years ago
Cc: | added |
---|---|
Has patch: | set |
Owner: | changed from | to
Status: | new → assigned |
comment:3 by , 3 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
comment:5 by , 3 years ago
There's an additional PR which been made which alludes to a situation missed by the original fix: https://github.com/django/django/pull/14700
I can't speak for the veracity of it as I haven't been following the details of the ticket, but it's probably worth someone glancing at it and rolling it into this ticket's fix log if appropriate.
PR: https://github.com/django/django/pull/14691