MCPcopy
hub / github.com/django/django / reverse_field_path

Function reverse_field_path

django/contrib/admin/utils.py:511–539  ·  view source on GitHub ↗

Create a reversed field path. E.g. Given (Order, "user__groups"), return (Group, "user__order"). Final field must be a related model, not a data field.

(model, path)

Source from the content-addressed store, hash-verified

509
510
511def reverse_field_path(model, path):
512 """Create a reversed field path.
513
514 E.g. Given (Order, "user__groups"),
515 return (Group, "user__order").
516
517 Final field must be a related model, not a data field.
518 """
519 reversed_path = []
520 parent = model
521 pieces = path.split(LOOKUP_SEP)
522 for piece in pieces:
523 field = parent._meta.get_field(piece)
524 # skip trailing data field if extant:
525 if len(reversed_path) == len(pieces) - 1: # final iteration
526 try:
527 get_model_from_relation(field)
528 except NotRelationField:
529 break
530
531 # Field should point to another model
532 if field.is_relation and not (field.auto_created and not field.concrete):
533 related_name = field.related_query_name()
534 parent = field.remote_field.model
535 else:
536 related_name = field.field.name
537 parent = field.related_model
538 reversed_path.insert(0, related_name)
539 return (parent, LOOKUP_SEP.join(reversed_path))
540
541
542def get_fields_from_path(model, path):

Callers 1

__init__Method · 0.90

Calls 6

get_model_from_relationFunction · 0.85
related_query_nameMethod · 0.80
insertMethod · 0.80
splitMethod · 0.45
get_fieldMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected