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

Method _join_select_related

tortoise/queryset.py:1075–1106  ·  view source on GitHub ↗
(self, lookup_expression: str)

Source from the content-addressed store, hash-verified

1073 return queryset
1074
1075 def _join_select_related(self, lookup_expression: str) -> tuple[type[Model], Table]:
1076 fields = expand_lookup_expression(self.model, lookup_expression)
1077 model = self.model
1078 table = self.model._meta.basetable
1079 path: tuple[str | None, ...] = (None,)
1080 for field in fields:
1081 field = cast(RelationalField, field)
1082 path = path + (field.model_field_name,)
1083 table = self._join_table_by_field(table, field.model_field_name, field)
1084
1085 # do not select related fields if we are only selecting a subset of fields
1086 if self._fields_for_select:
1087 continue
1088
1089 related_fields = field.related_model._meta.db_fields
1090 append_item = (
1091 field.related_model,
1092 len(related_fields),
1093 field.model_field_name,
1094 model,
1095 path,
1096 )
1097 model = field.related_model
1098 if append_item not in self._select_related_idx:
1099 self._select_related_idx.append(append_item)
1100 self.query = self.query.select(
1101 *[
1102 table[related_field].as_(f"{table.get_table_name()}.{related_field}")
1103 for related_field in related_fields
1104 ]
1105 )
1106 return model, table
1107
1108 def _resolve_only(self, only_lookup_expressions: tuple[str, ...]) -> None:
1109 # Group fields by fetch fields, e.g. ["a__b", "a__c"] -> {"a": ["b", "c"]}.

Callers 1

_make_queryMethod · 0.95

Calls 3

expand_lookup_expressionFunction · 0.90
_join_table_by_fieldMethod · 0.80
as_Method · 0.80

Tested by

no test coverage detected