MCPcopy
hub / github.com/tortoise/tortoise-orm / ReverseRelation

Class ReverseRelation

tortoise/fields/relational.py:33–164  ·  view source on GitHub ↗

Relation container for :func:`.ForeignKeyField`.

Source from the content-addressed store, hash-verified

31
32
33class ReverseRelation(Generic[MODEL]):
34 """
35 Relation container for :func:`.ForeignKeyField`.
36 """
37
38 def __init__(
39 self,
40 remote_model: type[MODEL],
41 relation_field: str,
42 instance: Model,
43 from_field: str,
44 ) -> None:
45 self.remote_model = remote_model
46 self.relation_field = relation_field
47 self.instance = instance
48 self.from_field = from_field
49 self._fetched = False
50 self._custom_query = False
51 self.related_objects: list[MODEL] = []
52
53 @property
54 def _query(self) -> QuerySet[MODEL]:
55 if not self.instance._saved_in_db:
56 raise OperationalError(
57 "This objects hasn't been instanced, call .save() before calling related queries"
58 )
59 return self.remote_model.filter(
60 **{self.relation_field: getattr(self.instance, self.from_field)}
61 )
62
63 def __contains__(self, item: Any) -> bool:
64 self._raise_if_not_fetched()
65 return item in self.related_objects
66
67 def __iter__(self) -> Iterator[MODEL]:
68 self._raise_if_not_fetched()
69 return self.related_objects.__iter__()
70
71 def __len__(self) -> int:
72 self._raise_if_not_fetched()
73 return len(self.related_objects)
74
75 def __bool__(self) -> bool:
76 self._raise_if_not_fetched()
77 return bool(self.related_objects)
78
79 def __getitem__(self, item: int) -> MODEL:
80 self._raise_if_not_fetched()
81 return self.related_objects[item]
82
83 def __await__(self) -> Generator[Any, None, list[MODEL]]:
84 return self._query.__await__()
85
86 async def __aiter__(self) -> AsyncGenerator[MODEL, None]:
87 if not self._fetched:
88 self._set_result_for_query(await self)
89 for val in self.related_objects:
90 yield val

Callers 2

_rfk_getterFunction · 0.90
constructMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…