(self, lookup_expression: str)
| 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"]}. |
no test coverage detected