Fix KeyError when deleting a field with unqiue=True (#365)

* Fix KeyError when deleting a field with unqiue=True

* refactor: rename `old_data_unique` to `is_unique_field`

* Add testcases for remove unique field

---------

Co-authored-by: gongchangku <gongchangku@anban.tech>
Co-authored-by: Waket Zheng <waketzheng@gmail.com>
This commit is contained in:
gck123
2024-12-03 10:16:44 +08:00
committed by GitHub
parent 103470f4c1
commit c0fd3ec63c
4 changed files with 62 additions and 8 deletions

View File

@@ -425,8 +425,9 @@ class Migrate:
upgrade,
)
if old_data_field["indexed"]:
is_unique_field = old_data_field.get("unique")
cls._add_operator(
cls._drop_index(model, {db_column}),
cls._drop_index(model, {db_column}, is_unique_field),
upgrade,
True,
)
@@ -548,13 +549,17 @@ class Migrate:
def _resolve_fk_fields_name(cls, model: Type[Model], fields_name: Iterable[str]) -> List[str]:
ret = []
for field_name in fields_name:
field = model._meta.fields_map[field_name]
if field.source_field:
ret.append(field.source_field)
elif field_name in model._meta.fk_fields:
ret.append(field_name + "_id")
try:
field = model._meta.fields_map[field_name]
except KeyError:
# field dropped or to be add
pass
else:
ret.append(field_name)
if field.source_field:
field_name = field.source_field
elif field_name in model._meta.fk_fields:
field_name += "_id"
ret.append(field_name)
return ret
@classmethod