#32743: Migrations don't alter foreign key data types when referencing primary
keys
in MTI models.
--------------------------------------------+------------------------
Reporter: Mariusz Felisiak | Owner: nobody
Type: Bug | Status: new
Component: Migrations | Version: 3.2
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
--------------------------------------------+------------------------
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.
--
Ticket URL: <https://code.djangoproject.com/ticket/32743>
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/050.28eb88b8e02e18ba903321988e9352b2%40djangoproject.com.