From abfa60133f5ebefa1a380ff13ababf26ee87a341 Mon Sep 17 00:00:00 2001 From: long2ice Date: Thu, 4 Feb 2021 14:23:46 +0800 Subject: [PATCH] Fix drop table --- aerich/ddl/__init__.py | 6 +++--- aerich/migrate.py | 19 ++++++++++++------- poetry.lock | 2 -- tests/test_ddl.py | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/aerich/ddl/__init__.py b/aerich/ddl/__init__.py index cd9da5f..441141e 100644 --- a/aerich/ddl/__init__.py +++ b/aerich/ddl/__init__.py @@ -34,8 +34,8 @@ class BaseDDL: def create_table(self, model: "Type[Model]"): return self.schema_generator._get_table_sql(model, True)["table_creation_string"] - def drop_table(self, model: "Type[Model]"): - return self._DROP_TABLE_TEMPLATE.format(table_name=model._meta.db_table) + def drop_table(self, table_name: str): + return self._DROP_TABLE_TEMPLATE.format(table_name=table_name) def create_m2m( self, model: "Type[Model]", field_describe: dict, reference_table_describe: dict @@ -199,7 +199,7 @@ class BaseDDL: table_name=db_table, fk_name=fk_name, db_column=db_column, - table=field_describe.get("name"), + table=reference_table_describe.get("table"), field=reference_id, on_delete=field_describe.get("on_delete"), ) diff --git a/aerich/migrate.py b/aerich/migrate.py index a41fc0b..2532105 100644 --- a/aerich/migrate.py +++ b/aerich/migrate.py @@ -169,12 +169,17 @@ class Migrate: model = cls._get_model(new_model_describe.get("name").split(".")[1]) if new_model_str not in old_models.keys(): - cls._add_operator(cls.add_model(cls._get_model(new_model_str)), upgrade) + cls._add_operator(cls.add_model(model), upgrade) else: old_model_describe = old_models.get(new_model_str) - old_unique_together = old_model_describe.get("unique_together") - new_unique_together = new_model_describe.get("unique_together") + old_unique_together = map( + lambda x: tuple(x), old_model_describe.get("unique_together") + ) + new_unique_together = map( + lambda x: tuple(x), new_model_describe.get("unique_together") + ) + old_pk_field = old_model_describe.get("pk_field") new_pk_field = new_model_describe.get("pk_field") # pk field @@ -328,7 +333,7 @@ class Migrate: filter(lambda x: x.get("name") == new_fk_field_name, new_fk_fields) ) cls._add_operator( - cls._add_fk(model, fk_field, old_models.get(fk_field.get("python_type"))), + cls._add_fk(model, fk_field, new_models.get(fk_field.get("python_type"))), upgrade, fk_m2m=True, ) @@ -381,15 +386,15 @@ class Migrate: for old_model in old_models: if old_model not in new_models.keys(): - cls._add_operator(cls.remove_model(cls._get_model(old_model)), upgrade) + cls._add_operator(cls.drop_model(old_models.get(old_model).get("table")), upgrade) @classmethod def add_model(cls, model: Type[Model]): return cls.ddl.create_table(model) @classmethod - def remove_model(cls, model: Type[Model]): - return cls.ddl.drop_table(model) + def drop_model(cls, table_name: str): + return cls.ddl.drop_table(table_name) @classmethod def create_m2m(cls, model: Type[Model], field_describe: dict, reference_table_describe: dict): diff --git a/poetry.lock b/poetry.lock index d3b85b6..139396f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -635,7 +635,6 @@ click = [ ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] ddlparse = [ {file = "ddlparse-1.9.0-py3-none-any.whl", hash = "sha256:a7962615a9325be7d0f182cbe34011e6283996473fb98c784c6f675b9783bc18"}, @@ -666,7 +665,6 @@ importlib-metadata = [ {file = "importlib_metadata-3.4.0.tar.gz", hash = "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d"}, ] iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] iso8601 = [ diff --git a/tests/test_ddl.py b/tests/test_ddl.py index 76855cf..9a51289 100644 --- a/tests/test_ddl.py +++ b/tests/test_ddl.py @@ -50,7 +50,7 @@ COMMENT ON COLUMN "category"."user_id" IS 'User';""" def test_drop_table(): - ret = Migrate.ddl.drop_table(Category) + ret = Migrate.ddl.drop_table(Category._meta.db_table) if isinstance(Migrate.ddl, MysqlDDL): assert ret == "DROP TABLE IF EXISTS `category`" else: