• 
      

    Add utilities for iterating through model fields and reverse relations.

    Review Request #12231 — Created April 8, 2022 and submitted — Latest diff uploaded

    Information

    Django Evolution
    release-2.x

    Reviewers

    This introduces the following new functions in
    django_evolution.utils.models:

    • walk_model_tree(): Iterates through a model an all of its parents.

    • get_model_rel_tree(): Builds and returns a cached dictionary mapping
      table names to reverse relations.

    • clear_model_rel_tree(): Clears the cached relation tree state.

    • iter_model_fields(): Iterates through fields on a model, yielding
      fields based on the provided criteria.

    • iter_non_m2m_reverse_relations(): Iterate through all actual reverse
      relation fields that point to another field (excluding
      ManyToManyField fields but including fields on their "through"
      tables).

    Each of these are basically equivalent to functionality internal to
    modern versions of Django, but lacking any equivalents in earlier
    versions. They'll be crucial for upcoming work on field type changes.

    Unit tests pass on all supported versions of Django.

    Made use of this new functionality in the in-progress field type changes.

    Commits

    Files