# relations.relation ## RelationType Objects ```python class RelationType(Enum) ``` Different types of relations supported by ormar: * ForeignKey = PRIMARY * reverse ForeignKey = REVERSE * ManyToMany = MULTIPLE #### PRIMARY #### REVERSE #### MULTIPLE ## Relation Objects ```python class Relation() ``` Keeps related Models and handles adding/removing of the children. #### \_\_init\_\_ ```python | __init__(manager: "RelationsManager", type_: RelationType, field_name: str, to: Type["T"], through: Type["T"] = None) -> None ``` Initialize the Relation and keep the related models either as instances of passed Model, or as a RelationProxy which is basically a list of models with some special behavior, as it exposes QuerySetProxy and allows querying the related models already pre filtered by parent model. **Arguments**: - `manager (RelationsManager)`: reference to relation manager - `type_ (RelationType)`: type of the relation - `field_name (str)`: name of the relation field - `to (Type[Model])`: model to which relation leads to - `through (Type[Model])`: model through which relation goes for m2m relations #### \_clean\_related ```python | _clean_related() -> None ``` Removes dead weakrefs from RelationProxy. #### \_find\_existing ```python | _find_existing(child: Union["NewBaseModel", Type["NewBaseModel"]]) -> Optional[int] ``` Find child model in RelationProxy if exists. **Arguments**: - `child (Model)`: child model to find **Returns**: `(Optional[ind])`: index of child in RelationProxy #### add ```python | add(child: "T") -> None ``` Adds child Model to relation, either sets child as related model or adds it to the list in RelationProxy depending on relation type. **Arguments**: - `child (Model)`: model to add to relation #### remove ```python | remove(child: Union["NewBaseModel", Type["NewBaseModel"]]) -> None ``` Removes child Model from relation, either sets None as related model or removes it from the list in RelationProxy depending on relation type. **Arguments**: - `child (Model)`: model to remove from relation #### get ```python | get() -> Optional[Union[List["T"], "T"]] ``` Return the related model or models from RelationProxy. **Returns**: `(Optional[Union[List[Model], Model]])`: related model/models if set #### \_\_repr\_\_ ```python | __repr__() -> str ```