add fk and drop fk
This commit is contained in:
@@ -27,13 +27,13 @@ class User(Model):
|
||||
last_login = fields.DatetimeField(description="Last Login", default=datetime.datetime.now)
|
||||
is_active = fields.BooleanField(default=True, description="Is Active")
|
||||
is_superuser = fields.BooleanField(default=False, description="Is SuperUser")
|
||||
avatar = fields.CharField(max_length=200, default="")
|
||||
intro = fields.TextField(default="")
|
||||
|
||||
|
||||
class Email(Model):
|
||||
email = fields.CharField(max_length=200)
|
||||
email = fields.CharField(max_length=200, index=True)
|
||||
is_primary = fields.BooleanField(default=False)
|
||||
address = fields.CharField(max_length=200)
|
||||
|
||||
|
||||
class Category(Model):
|
||||
@@ -60,3 +60,4 @@ class Config(Model):
|
||||
key = fields.CharField(max_length=20)
|
||||
value = fields.JSONField()
|
||||
status: Status = fields.IntEnumField(Status, default=Status.on)
|
||||
user = fields.ForeignKeyField("models.User", description="User")
|
||||
|
||||
@@ -24,7 +24,7 @@ class Status(IntEnum):
|
||||
class User(Model):
|
||||
username = fields.CharField(max_length=20)
|
||||
password = fields.CharField(max_length=200)
|
||||
last_login_at = fields.DatetimeField(description="Last Login", default=datetime.datetime.now)
|
||||
last_login = fields.DatetimeField(description="Last Login", default=datetime.datetime.now)
|
||||
is_active = fields.BooleanField(default=True, description="Is Active")
|
||||
is_superuser = fields.BooleanField(default=False, description="Is SuperUser")
|
||||
avatar = fields.CharField(max_length=200, default="")
|
||||
@@ -34,17 +34,18 @@ class User(Model):
|
||||
class Email(Model):
|
||||
email = fields.CharField(max_length=200)
|
||||
is_primary = fields.BooleanField(default=False)
|
||||
user = fields.ForeignKeyField("diff_models.User", db_constraint=True)
|
||||
user = fields.ForeignKeyField("models.User", db_constraint=False)
|
||||
|
||||
|
||||
class Category(Model):
|
||||
slug = fields.CharField(max_length=200)
|
||||
user = fields.ForeignKeyField("diff_models.User", description="User")
|
||||
name = fields.CharField(max_length=200)
|
||||
user = fields.ForeignKeyField("models.User", description="User")
|
||||
created_at = fields.DatetimeField(auto_now_add=True)
|
||||
|
||||
|
||||
class Product(Model):
|
||||
categories = fields.ManyToManyField("diff_models.Category")
|
||||
categories = fields.ManyToManyField("models.Category")
|
||||
name = fields.CharField(max_length=50)
|
||||
view_num = fields.IntField(description="View Num")
|
||||
sort = fields.IntField()
|
||||
@@ -180,7 +180,9 @@ def test_drop_index():
|
||||
|
||||
|
||||
def test_add_fk():
|
||||
ret = Migrate.ddl.add_fk(Category, Category._meta.fields_map.get("user").describe(False))
|
||||
ret = Migrate.ddl.add_fk(
|
||||
Category, Category._meta.fields_map.get("user").describe(False), User.describe(False)
|
||||
)
|
||||
if isinstance(Migrate.ddl, MysqlDDL):
|
||||
assert (
|
||||
ret
|
||||
@@ -194,7 +196,9 @@ def test_add_fk():
|
||||
|
||||
|
||||
def test_drop_fk():
|
||||
ret = Migrate.ddl.drop_fk(Category, Category._meta.fields_map.get("user"))
|
||||
ret = Migrate.ddl.drop_fk(
|
||||
Category, Category._meta.fields_map.get("user").describe(False), User.describe(False)
|
||||
)
|
||||
if isinstance(Migrate.ddl, MysqlDDL):
|
||||
assert ret == "ALTER TABLE `category` DROP FOREIGN KEY `fk_category_user_e2e3874c`"
|
||||
elif isinstance(Migrate.ddl, PostgresDDL):
|
||||
|
||||
@@ -1,25 +1,753 @@
|
||||
import pytest
|
||||
from pytest_mock import MockerFixture
|
||||
from tortoise import Tortoise
|
||||
|
||||
from aerich.ddl.mysql import MysqlDDL
|
||||
from aerich.ddl.postgres import PostgresDDL
|
||||
from aerich.ddl.sqlite import SqliteDDL
|
||||
from aerich.exceptions import NotSupportError
|
||||
from aerich.migrate import Migrate
|
||||
from aerich.utils import get_models_describe
|
||||
|
||||
old_models_describe = {
|
||||
"models.Category": {
|
||||
"name": "models.Category",
|
||||
"app": "models",
|
||||
"table": "category",
|
||||
"abstract": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"unique_together": [],
|
||||
"pk_field": {
|
||||
"name": "id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "id",
|
||||
"python_type": "int",
|
||||
"generated": True,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
"data_fields": [
|
||||
{
|
||||
"name": "slug",
|
||||
"field_type": "CharField",
|
||||
"db_column": "slug",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "name",
|
||||
"field_type": "CharField",
|
||||
"db_column": "name",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "created_at",
|
||||
"field_type": "DatetimeField",
|
||||
"db_column": "created_at",
|
||||
"python_type": "datetime.datetime",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"readOnly": True},
|
||||
"db_field_types": {
|
||||
"": "TIMESTAMP",
|
||||
"mysql": "DATETIME(6)",
|
||||
"postgres": "TIMESTAMPTZ",
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "user_id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "user_id",
|
||||
"python_type": "int",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": "User",
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
],
|
||||
"fk_fields": [
|
||||
{
|
||||
"name": "user",
|
||||
"field_type": "ForeignKeyFieldInstance",
|
||||
"python_type": "models.User",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": "User",
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"raw_field": "user_id",
|
||||
"on_delete": "CASCADE",
|
||||
}
|
||||
],
|
||||
"backward_fk_fields": [],
|
||||
"o2o_fields": [],
|
||||
"backward_o2o_fields": [],
|
||||
"m2m_fields": [
|
||||
{
|
||||
"name": "products",
|
||||
"field_type": "ManyToManyFieldInstance",
|
||||
"python_type": "models.Product",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
}
|
||||
],
|
||||
},
|
||||
"models.Config": {
|
||||
"name": "models.Config",
|
||||
"app": "models",
|
||||
"table": "config",
|
||||
"abstract": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"unique_together": [],
|
||||
"pk_field": {
|
||||
"name": "id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "id",
|
||||
"python_type": "int",
|
||||
"generated": True,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
"data_fields": [
|
||||
{
|
||||
"name": "label",
|
||||
"field_type": "CharField",
|
||||
"db_column": "label",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "key",
|
||||
"field_type": "CharField",
|
||||
"db_column": "key",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 20},
|
||||
"db_field_types": {"": "VARCHAR(20)"},
|
||||
},
|
||||
{
|
||||
"name": "value",
|
||||
"field_type": "JSONField",
|
||||
"db_column": "value",
|
||||
"python_type": "Union[dict, list]",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "TEXT", "postgres": "JSONB"},
|
||||
},
|
||||
{
|
||||
"name": "status",
|
||||
"field_type": "IntEnumFieldInstance",
|
||||
"db_column": "status",
|
||||
"python_type": "int",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": 1,
|
||||
"description": "on: 1\noff: 0",
|
||||
"docstring": None,
|
||||
"constraints": {"ge": -32768, "le": 32767},
|
||||
"db_field_types": {"": "SMALLINT"},
|
||||
},
|
||||
],
|
||||
"fk_fields": [],
|
||||
"backward_fk_fields": [],
|
||||
"o2o_fields": [],
|
||||
"backward_o2o_fields": [],
|
||||
"m2m_fields": [],
|
||||
},
|
||||
"models.Email": {
|
||||
"name": "models.Email",
|
||||
"app": "models",
|
||||
"table": "email",
|
||||
"abstract": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"unique_together": [],
|
||||
"pk_field": {
|
||||
"name": "id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "id",
|
||||
"python_type": "int",
|
||||
"generated": True,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
"data_fields": [
|
||||
{
|
||||
"name": "email",
|
||||
"field_type": "CharField",
|
||||
"db_column": "email",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "is_primary",
|
||||
"field_type": "BooleanField",
|
||||
"db_column": "is_primary",
|
||||
"python_type": "bool",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "BOOL", "sqlite": "INT"},
|
||||
},
|
||||
{
|
||||
"name": "user_id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "user_id",
|
||||
"python_type": "int",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
],
|
||||
"fk_fields": [
|
||||
{
|
||||
"name": "user",
|
||||
"field_type": "ForeignKeyFieldInstance",
|
||||
"python_type": "models.User",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"raw_field": "user_id",
|
||||
"on_delete": "CASCADE",
|
||||
}
|
||||
],
|
||||
"backward_fk_fields": [],
|
||||
"o2o_fields": [],
|
||||
"backward_o2o_fields": [],
|
||||
"m2m_fields": [],
|
||||
},
|
||||
"models.Product": {
|
||||
"name": "models.Product",
|
||||
"app": "models",
|
||||
"table": "product",
|
||||
"abstract": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"unique_together": [],
|
||||
"pk_field": {
|
||||
"name": "id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "id",
|
||||
"python_type": "int",
|
||||
"generated": True,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
"data_fields": [
|
||||
{
|
||||
"name": "name",
|
||||
"field_type": "CharField",
|
||||
"db_column": "name",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 50},
|
||||
"db_field_types": {"": "VARCHAR(50)"},
|
||||
},
|
||||
{
|
||||
"name": "view_num",
|
||||
"field_type": "IntField",
|
||||
"db_column": "view_num",
|
||||
"python_type": "int",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": "View Num",
|
||||
"docstring": None,
|
||||
"constraints": {"ge": -2147483648, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
{
|
||||
"name": "sort",
|
||||
"field_type": "IntField",
|
||||
"db_column": "sort",
|
||||
"python_type": "int",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": -2147483648, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
{
|
||||
"name": "is_reviewed",
|
||||
"field_type": "BooleanField",
|
||||
"db_column": "is_reviewed",
|
||||
"python_type": "bool",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": "Is Reviewed",
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "BOOL", "sqlite": "INT"},
|
||||
},
|
||||
{
|
||||
"name": "type",
|
||||
"field_type": "IntEnumFieldInstance",
|
||||
"db_column": "type",
|
||||
"python_type": "int",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": "Product Type",
|
||||
"docstring": None,
|
||||
"constraints": {"ge": -32768, "le": 32767},
|
||||
"db_field_types": {"": "SMALLINT"},
|
||||
},
|
||||
{
|
||||
"name": "image",
|
||||
"field_type": "CharField",
|
||||
"db_column": "image",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"field_type": "TextField",
|
||||
"db_column": "body",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "TEXT", "mysql": "LONGTEXT"},
|
||||
},
|
||||
{
|
||||
"name": "created_at",
|
||||
"field_type": "DatetimeField",
|
||||
"db_column": "created_at",
|
||||
"python_type": "datetime.datetime",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"readOnly": True},
|
||||
"db_field_types": {
|
||||
"": "TIMESTAMP",
|
||||
"mysql": "DATETIME(6)",
|
||||
"postgres": "TIMESTAMPTZ",
|
||||
},
|
||||
},
|
||||
],
|
||||
"fk_fields": [],
|
||||
"backward_fk_fields": [],
|
||||
"o2o_fields": [],
|
||||
"backward_o2o_fields": [],
|
||||
"m2m_fields": [
|
||||
{
|
||||
"name": "categories",
|
||||
"field_type": "ManyToManyFieldInstance",
|
||||
"python_type": "models.Category",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
}
|
||||
],
|
||||
},
|
||||
"models.User": {
|
||||
"name": "models.User",
|
||||
"app": "models",
|
||||
"table": "user",
|
||||
"abstract": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"unique_together": [],
|
||||
"pk_field": {
|
||||
"name": "id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "id",
|
||||
"python_type": "int",
|
||||
"generated": True,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
"data_fields": [
|
||||
{
|
||||
"name": "username",
|
||||
"field_type": "CharField",
|
||||
"db_column": "username",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 20},
|
||||
"db_field_types": {"": "VARCHAR(20)"},
|
||||
},
|
||||
{
|
||||
"name": "password",
|
||||
"field_type": "CharField",
|
||||
"db_column": "password",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "last_login",
|
||||
"field_type": "DatetimeField",
|
||||
"db_column": "last_login",
|
||||
"python_type": "datetime.datetime",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": "<function None.now>",
|
||||
"description": "Last Login",
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {
|
||||
"": "TIMESTAMP",
|
||||
"mysql": "DATETIME(6)",
|
||||
"postgres": "TIMESTAMPTZ",
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "is_active",
|
||||
"field_type": "BooleanField",
|
||||
"db_column": "is_active",
|
||||
"python_type": "bool",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": True,
|
||||
"description": "Is Active",
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "BOOL", "sqlite": "INT"},
|
||||
},
|
||||
{
|
||||
"name": "is_superuser",
|
||||
"field_type": "BooleanField",
|
||||
"db_column": "is_superuser",
|
||||
"python_type": "bool",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": False,
|
||||
"description": "Is SuperUser",
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "BOOL", "sqlite": "INT"},
|
||||
},
|
||||
{
|
||||
"name": "avatar",
|
||||
"field_type": "CharField",
|
||||
"db_column": "avatar",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": "",
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 200},
|
||||
"db_field_types": {"": "VARCHAR(200)"},
|
||||
},
|
||||
{
|
||||
"name": "intro",
|
||||
"field_type": "TextField",
|
||||
"db_column": "intro",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": "",
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "TEXT", "mysql": "LONGTEXT"},
|
||||
},
|
||||
],
|
||||
"fk_fields": [],
|
||||
"backward_fk_fields": [
|
||||
{
|
||||
"name": "categorys",
|
||||
"field_type": "BackwardFKRelation",
|
||||
"python_type": "models.Category",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": "User",
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
},
|
||||
{
|
||||
"name": "emails",
|
||||
"field_type": "BackwardFKRelation",
|
||||
"python_type": "models.Email",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
},
|
||||
],
|
||||
"o2o_fields": [],
|
||||
"backward_o2o_fields": [],
|
||||
"m2m_fields": [],
|
||||
},
|
||||
"models.Aerich": {
|
||||
"name": "models.Aerich",
|
||||
"app": "models",
|
||||
"table": "aerich",
|
||||
"abstract": False,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"unique_together": [],
|
||||
"pk_field": {
|
||||
"name": "id",
|
||||
"field_type": "IntField",
|
||||
"db_column": "id",
|
||||
"python_type": "int",
|
||||
"generated": True,
|
||||
"Noneable": False,
|
||||
"unique": True,
|
||||
"indexed": True,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"ge": 1, "le": 2147483647},
|
||||
"db_field_types": {"": "INT"},
|
||||
},
|
||||
"data_fields": [
|
||||
{
|
||||
"name": "version",
|
||||
"field_type": "CharField",
|
||||
"db_column": "version",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 255},
|
||||
"db_field_types": {"": "VARCHAR(255)"},
|
||||
},
|
||||
{
|
||||
"name": "app",
|
||||
"field_type": "CharField",
|
||||
"db_column": "app",
|
||||
"python_type": "str",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {"max_length": 20},
|
||||
"db_field_types": {"": "VARCHAR(20)"},
|
||||
},
|
||||
{
|
||||
"name": "content",
|
||||
"field_type": "JSONField",
|
||||
"db_column": "content",
|
||||
"python_type": "Union[dict, list]",
|
||||
"generated": False,
|
||||
"Noneable": False,
|
||||
"unique": False,
|
||||
"indexed": False,
|
||||
"default": None,
|
||||
"description": None,
|
||||
"docstring": None,
|
||||
"constraints": {},
|
||||
"db_field_types": {"": "TEXT", "postgres": "JSONB"},
|
||||
},
|
||||
],
|
||||
"fk_fields": [],
|
||||
"backward_fk_fields": [],
|
||||
"o2o_fields": [],
|
||||
"backward_o2o_fields": [],
|
||||
"m2m_fields": [],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_migrate(mocker: MockerFixture):
|
||||
mocker.patch("click.prompt", return_value=True)
|
||||
apps = Tortoise.apps
|
||||
models = apps.get("models")
|
||||
diff_models = apps.get("diff_models")
|
||||
Migrate.diff_models(diff_models, models)
|
||||
def test_migrate():
|
||||
"""
|
||||
models.py diff with old_models.py
|
||||
- add field: Email.address
|
||||
- add fk: Config.user
|
||||
- drop fk: Email.user
|
||||
- drop field: User.avatar
|
||||
- add index: Email.email
|
||||
- remove unique: User.username
|
||||
"""
|
||||
models_describe = get_models_describe("models")
|
||||
Migrate.diff_models(old_models_describe, models_describe)
|
||||
if isinstance(Migrate.ddl, SqliteDDL):
|
||||
with pytest.raises(NotSupportError):
|
||||
Migrate.diff_models(models, diff_models, False)
|
||||
Migrate.diff_models(models_describe, old_models_describe, False)
|
||||
else:
|
||||
Migrate.diff_models(models, diff_models, False)
|
||||
Migrate.diff_models(models_describe, old_models_describe, False)
|
||||
Migrate._merge_operators()
|
||||
if isinstance(Migrate.ddl, MysqlDDL):
|
||||
assert Migrate.upgrade_operators == [
|
||||
|
||||
Reference in New Issue
Block a user