mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #30591 -- Fixed recreation of foreign key constraints on MySQL when altering type of referenced unique field.
Thanks Mariusz Felisiak for tests and Matthijs Kooijman for investigation and initial patch.
This commit is contained in:
committed by
Mariusz Felisiak
parent
b616908ce1
commit
241deed259
@@ -1308,6 +1308,51 @@ class OperationTests(OperationTestBase):
|
||||
operation.database_backwards("test_alflpkfk", editor, new_state, project_state)
|
||||
assertIdTypeEqualsFkType()
|
||||
|
||||
@skipUnlessDBFeature('supports_foreign_keys')
|
||||
def test_alter_field_reloads_state_on_fk_with_to_field_target_type_change(self):
|
||||
app_label = 'alter_field_reloads_state_on_fk_with_to_field_target_type_change'
|
||||
project_state = self.apply_operations(app_label, ProjectState(), operations=[
|
||||
migrations.CreateModel('Rider', fields=[
|
||||
('id', models.AutoField(primary_key=True)),
|
||||
('code', models.PositiveIntegerField(unique=True)),
|
||||
]),
|
||||
migrations.CreateModel('Pony', fields=[
|
||||
('id', models.AutoField(primary_key=True)),
|
||||
('rider', models.ForeignKey('%s.Rider' % app_label, models.CASCADE, to_field='code')),
|
||||
]),
|
||||
])
|
||||
operation = migrations.AlterField(
|
||||
'Rider',
|
||||
'code',
|
||||
models.CharField(max_length=100, unique=True),
|
||||
)
|
||||
self.apply_operations(app_label, project_state, operations=[operation])
|
||||
|
||||
@skipUnlessDBFeature('supports_foreign_keys')
|
||||
def test_alter_field_reloads_state_on_fk_with_to_field_related_name_target_type_change(self):
|
||||
app_label = 'alter_field_reloads_state_on_fk_with_to_field_rn_target_type_change'
|
||||
project_state = self.apply_operations(app_label, ProjectState(), operations=[
|
||||
migrations.CreateModel('Rider', fields=[
|
||||
('id', models.AutoField(primary_key=True)),
|
||||
('code', models.PositiveIntegerField(unique=True)),
|
||||
]),
|
||||
migrations.CreateModel('Pony', fields=[
|
||||
('id', models.AutoField(primary_key=True)),
|
||||
('rider', models.ForeignKey(
|
||||
'%s.Rider' % app_label,
|
||||
models.CASCADE,
|
||||
to_field='code',
|
||||
related_name='+',
|
||||
)),
|
||||
]),
|
||||
])
|
||||
operation = migrations.AlterField(
|
||||
'Rider',
|
||||
'code',
|
||||
models.CharField(max_length=100, unique=True),
|
||||
)
|
||||
self.apply_operations(app_label, project_state, operations=[operation])
|
||||
|
||||
def test_alter_field_reloads_state_on_fk_target_changes(self):
|
||||
"""
|
||||
If AlterField doesn't reload state appropriately, the second AlterField
|
||||
|
||||
Reference in New Issue
Block a user