(root_model: type[Model], lookup_expression: str)
| 86 | |
| 87 | |
| 88 | def expand_lookup_expression(root_model: type[Model], lookup_expression: str) -> Sequence[Field]: |
| 89 | field_names = lookup_expression.split("__") |
| 90 | fields: list[Field | RelationalField] = [] |
| 91 | model = root_model |
| 92 | for field_name in field_names[:-1]: |
| 93 | if field_name not in model._meta.fetch_fields: |
| 94 | raise FieldError(f"{lookup_expression} not resolvable") |
| 95 | field = cast(RelationalField, model._meta.fields_map[field_name]) |
| 96 | fields.append(field) |
| 97 | model = field.related_model |
| 98 | # the last field is not necessarily a RelationalField, so threting it differently |
| 99 | try: |
| 100 | fields.append(model._meta.fields_map[field_names[-1]]) |
| 101 | except KeyError: |
| 102 | raise FieldError(f"{lookup_expression} not resolvable") |
| 103 | return fields |
| 104 | |
| 105 | |
| 106 | def resolve_nested_field( |
no test coverage detected
searching dependent graphs…