include properties as fields in dict and json of models

This commit is contained in:
collerek
2020-11-10 11:25:34 +01:00
parent 7a1dbfaa79
commit 22d594bcbd
3 changed files with 89 additions and 1 deletions

View File

@ -30,7 +30,9 @@ def create_dummy_model(
pk_field: Type[Union[BaseField, "ForeignKeyField", "ManyToManyField"]],
) -> Type["BaseModel"]:
fields = {f"{pk_field.name}": (pk_field.__type__, None)}
dummy_model = create_model(f"PkOnly{base_model.get_name(lower=False)}", **fields) # type: ignore
dummy_model = create_model(
f"PkOnly{base_model.get_name(lower=False)}", **fields # type: ignore
)
return dummy_model

View File

@ -5,6 +5,7 @@ from typing import (
Any,
Callable,
Dict,
List,
Mapping,
Optional,
Sequence,
@ -176,6 +177,15 @@ class NewBaseModel(pydantic.BaseModel, ModelTableProxy, metaclass=ModelMetaclass
def remove(self, name: "T") -> None:
self._orm.remove_parent(self, name)
@classmethod
def get_properties(cls) -> List[str]:
return [
prop
for prop in dir(cls)
if isinstance(getattr(cls, prop), property)
and prop not in ("__values__", "__fields__", "fields", "pk_column")
]
def dict( # noqa A003
self,
*,
@ -214,6 +224,16 @@ class NewBaseModel(pydantic.BaseModel, ModelTableProxy, metaclass=ModelMetaclass
dict_instance[field] = nested_model.dict(nested=True)
else:
dict_instance[field] = None
# include model properties as fields
props = self.get_properties()
if include:
props = [prop for prop in props if prop in include]
if exclude:
props = [prop for prop in props if prop not in exclude]
if props:
dict_instance.update({prop: getattr(self, prop) for prop in props})
return dict_instance
def from_dict(self, value_dict: Dict) -> "NewBaseModel":