fix: modify multiple times. (#279)

This commit is contained in:
long2ice 2023-01-27 13:49:07 +08:00
parent 3fbf9febfb
commit 1c9b65cc37
3 changed files with 38 additions and 23 deletions

View File

@ -5,6 +5,7 @@
### 0.7.2
- Support virtual fields.
- Fix modify multiple times. (#279)
### 0.7.1

View File

@ -40,7 +40,9 @@ class BaseDDL:
self.schema_generator = self.schema_generator_cls(client)
def create_table(self, model: "Type[Model]"):
return self.schema_generator._get_table_sql(model, True)["table_creation_string"].rstrip(";")
return self.schema_generator._get_table_sql(model, True)["table_creation_string"].rstrip(
";"
)
def drop_table(self, table_name: str):
return self._DROP_TABLE_TEMPLATE.format(table_name=table_name)

View File

@ -281,10 +281,18 @@ class Migrate:
# remove indexes
for index in old_indexes.difference(new_indexes):
cls._add_operator(cls._drop_index(model, index, False), upgrade, True)
old_data_fields = list(filter(lambda x: x.get('db_field_types') is not None,
old_model_describe.get("data_fields")))
new_data_fields = list(filter(lambda x: x.get('db_field_types') is not None,
new_model_describe.get("data_fields")))
old_data_fields = list(
filter(
lambda x: x.get("db_field_types") is not None,
old_model_describe.get("data_fields"),
)
)
new_data_fields = list(
filter(
lambda x: x.get("db_field_types") is not None,
new_model_describe.get("data_fields"),
)
)
old_data_fields_name = list(map(lambda x: x.get("name"), old_data_fields))
new_data_fields_name = list(map(lambda x: x.get("name"), new_data_fields))
@ -440,6 +448,7 @@ class Migrate:
filter(lambda x: x.get("name") == field_name, new_data_fields)
)
changes = diff(old_data_field, new_data_field)
modified = False
for change in changes:
_, option, old_new = change
if option == "indexed":
@ -477,11 +486,14 @@ class Migrate:
# change nullable
cls._add_operator(cls._alter_null(model, new_data_field), upgrade)
else:
if modified:
continue
# modify column
cls._add_operator(
cls._modify_field(model, new_data_field),
upgrade,
)
modified = True
for old_model in old_models:
if old_model not in new_models.keys():