Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions tests/utils/test_describe_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,7 @@ def test_describe_model_straight(self):
"backward_key": "straightfields_rel_id",
"through": "straightfields_straightfields",
"on_delete": "NO ACTION",
"create_unique_index": True,
"_generated": False,
"db_constraint": True,
},
Expand All @@ -362,6 +363,7 @@ def test_describe_model_straight(self):
"backward_key": "straightfields_id",
"through": "straightfields_straightfields",
"on_delete": "CASCADE",
"create_unique_index": True,
"db_constraint": True,
"_generated": True,
},
Expand Down Expand Up @@ -570,6 +572,7 @@ def test_describe_model_straight_native(self):
"backward_key": "straightfields_rel_id",
"through": "straightfields_straightfields",
"on_delete": "NO ACTION",
"create_unique_index": True,
"_generated": False,
"db_constraint": True,
},
Expand All @@ -591,6 +594,7 @@ def test_describe_model_straight_native(self):
"backward_key": "straightfields_id",
"through": "straightfields_straightfields",
"on_delete": "CASCADE",
"create_unique_index": True,
"_generated": True,
"db_constraint": True,
},
Expand Down Expand Up @@ -799,6 +803,7 @@ def test_describe_model_source(self):
"backward_key": "backward_sts",
"through": "sometable_self",
"on_delete": "NO ACTION",
"create_unique_index": True,
"_generated": False,
"db_constraint": True,
},
Expand All @@ -820,6 +825,7 @@ def test_describe_model_source(self):
"backward_key": "sts_forward",
"through": "sometable_self",
"on_delete": "CASCADE",
"create_unique_index": True,
"_generated": True,
"db_constraint": True,
},
Expand Down Expand Up @@ -1028,6 +1034,7 @@ def test_describe_model_source_native(self):
"backward_key": "backward_sts",
"through": "sometable_self",
"on_delete": "NO ACTION",
"create_unique_index": True,
"_generated": False,
"db_constraint": True,
},
Expand All @@ -1049,6 +1056,7 @@ def test_describe_model_source_native(self):
"backward_key": "sts_forward",
"through": "sometable_self",
"on_delete": "CASCADE",
"create_unique_index": True,
"_generated": True,
"db_constraint": True,
},
Expand Down Expand Up @@ -1122,6 +1130,7 @@ def test_describe_model_uuidpk(self):
"name": "peers",
"nullable": False,
"on_delete": "CASCADE",
"create_unique_index": True,
"python_type": "models.UUIDM2MRelatedModel",
"related_name": "models",
"through": "uuidm2mrelatedmodel_uuidpkmodel",
Expand Down Expand Up @@ -1199,6 +1208,7 @@ def test_describe_model_uuidpk_native(self):
"backward_key": "uuidpkmodel_id",
"through": "uuidm2mrelatedmodel_uuidpkmodel",
"on_delete": "CASCADE",
"create_unique_index": True,
"_generated": True,
}
],
Expand Down
1 change: 1 addition & 0 deletions tortoise/fields/relational.py
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ def describe(self, serializable: bool) -> dict:
desc["backward_key"] = self.backward_key
desc["through"] = self.through
desc["on_delete"] = str(self.on_delete)
desc["create_unique_index"] = self.create_unique_index
desc["_generated"] = self._generated
return desc

Expand Down
76 changes: 38 additions & 38 deletions tortoise/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1535,46 +1535,46 @@ def describe(cls, serializable: bool = True) -> dict:

Each field is specified as defined in :meth:`tortoise.fields.base.Field.describe`
"""
fields: dict[str, list[dict]] = {
"data_fields": [],
"fk_fields": [],
"backward_fk_fields": [],
"o2o_fields": [],
"backward_o2o_fields": [],
"m2m_fields": [],
}
meta = cls._meta
data_field_names = meta.fields - meta.fetch_fields
for name, field in meta.fields_map.items():
if name == meta.pk_attr:
continue
elif name in data_field_names:
key = "data_fields"
elif name in meta.fk_fields:
key = "fk_fields"
elif name in meta.backward_fk_fields:
key = "backward_fk_fields"
elif name in meta.o2o_fields:
key = "o2o_fields"
elif name in meta.backward_o2o_fields:
key = "backward_o2o_fields"
elif name in meta.m2m_fields:
key = "m2m_fields"
else:
continue
fields[key].append(field.describe(serializable))

return {
"name": cls._meta.full_name,
"app": cls._meta.app,
"table": cls._meta.db_table,
"abstract": cls._meta.abstract,
"description": cls._meta.table_description or None,
"name": meta.full_name,
"app": meta.app,
"table": meta.db_table,
"abstract": meta.abstract,
"description": meta.table_description or None,
"docstring": inspect.cleandoc(cls.__doc__ or "") or None,
"unique_together": cls._meta.unique_together or [],
"indexes": [cls._describe_index(index, serializable) for index in cls._meta.indexes],
"pk_field": cls._meta.fields_map[cls._meta.pk_attr].describe(serializable),
"data_fields": [
field.describe(serializable)
for name, field in cls._meta.fields_map.items()
if name != cls._meta.pk_attr and name in (cls._meta.fields - cls._meta.fetch_fields)
],
"fk_fields": [
field.describe(serializable)
for name, field in cls._meta.fields_map.items()
if name in cls._meta.fk_fields
],
"backward_fk_fields": [
field.describe(serializable)
for name, field in cls._meta.fields_map.items()
if name in cls._meta.backward_fk_fields
],
"o2o_fields": [
field.describe(serializable)
for name, field in cls._meta.fields_map.items()
if name in cls._meta.o2o_fields
],
"backward_o2o_fields": [
field.describe(serializable)
for name, field in cls._meta.fields_map.items()
if name in cls._meta.backward_o2o_fields
],
"m2m_fields": [
field.describe(serializable)
for name, field in cls._meta.fields_map.items()
if name in cls._meta.m2m_fields
],
"unique_together": meta.unique_together or [],
"indexes": [cls._describe_index(index, serializable) for index in meta.indexes],
"pk_field": meta.fields_map[meta.pk_attr].describe(serializable),
**fields,
}

def __await__(self: MODEL) -> Generator[Any, None, MODEL]:
Expand Down