mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #24435 -- Prevented m2m field removal and addition in migrations when changing blank
Thanks Mark Tranchant for the report an Tim Graham for the test and review.
This commit is contained in:
@@ -848,8 +848,16 @@ class MigrationAutodetector(object):
|
||||
old_field_dec = self.deep_deconstruct(old_field)
|
||||
new_field_dec = self.deep_deconstruct(new_field)
|
||||
if old_field_dec != new_field_dec:
|
||||
if (not isinstance(old_field, models.ManyToManyField) and
|
||||
not isinstance(new_field, models.ManyToManyField)):
|
||||
both_m2m = (
|
||||
isinstance(old_field, models.ManyToManyField) and
|
||||
isinstance(new_field, models.ManyToManyField)
|
||||
)
|
||||
neither_m2m = (
|
||||
not isinstance(old_field, models.ManyToManyField) and
|
||||
not isinstance(new_field, models.ManyToManyField)
|
||||
)
|
||||
if both_m2m or neither_m2m:
|
||||
# Either both fields are m2m or neither is
|
||||
preserve_default = True
|
||||
if (old_field.null and not new_field.null and not new_field.has_default() and
|
||||
not isinstance(new_field, models.ManyToManyField)):
|
||||
@@ -870,6 +878,7 @@ class MigrationAutodetector(object):
|
||||
)
|
||||
)
|
||||
else:
|
||||
# We cannot alter between m2m and concrete fields
|
||||
self._generate_removed_field(app_label, model_name, field_name)
|
||||
self._generate_added_field(app_label, model_name, field_name)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user