mirror of
https://github.com/django/django.git
synced 2025-08-04 02:48:35 +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:
parent
b616908ce1
commit
241deed259
2 changed files with 52 additions and 3 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue