Skip to main content

Django Model Map

Django CI PyPI version Python Versions License

Stop guessing your query optimizations.

django-model-map is a simple management command that inspects your Django models and outputs a JSON map of relationships. It explicitly categorizes relations into select_related and prefetch_related candidates, helping you avoid N+1 problems and write optimized QuerySets faster.

Features

  • Automatic Classification: Distinguishes between select_related (ForeignKey, OneToOne) and prefetch_related (ManyToMany, Reverse FK).
  • Deep Inspection: Supports configurable nesting levels for mapping nested relationships (e.g., prefetch_related('lvl1__lvl2__lvl3')).
  • Reverse Relation Discovery: Finds standard _set accessors and custom related_name attributes.
  • Recursion Detection: Identifies self-referencing models.
  • GenericForeignKey: Detects GFK fields and marks them in the output.
  • JSON / YAML Output: Easy to read, parse, or integrate into other tools.

Installation

pip install django-model-map

# With YAML output support (optional)
pip install django-model-map[yaml]

Add to INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'django_model_map',
    ...
]

Usage

CLI

# Inspect all installed apps
python manage.py modelmap

# Inspect a specific app
python manage.py modelmap [app_name]

# Named alternative to positional
python manage.py modelmap --app [app_name]

# Specify inspection nesting level (default: 1)
python manage.py modelmap [app_name] --depth 2

# Exclude models or entire apps (repeatable)
python manage.py modelmap --exclude auth.Permission --exclude auth.Group

# Save to file
python manage.py modelmap [app_name] --output relations.json

# YAML output (requires pip install django-model-map[yaml])
python manage.py modelmap [app_name] --format yaml

Python API

from django_model_map import get_model_map

# Inspect a specific app, depth 2, exclude some models
model_map = get_model_map(app_label='myapp', depth=2, exclude=['myapp.OldModel'])

for model_name, data in model_map.items():
    print(data['queryset_snippet'])

Example Output

{
    "blog.Post": {
        "queryset_snippet": "Post.objects.select_related('author', 'category').prefetch_related('tags', 'comments')",
        "select_related_fields": [
            "author",
            "category"
        ],
        "prefetch_related_fields": [
            "tags",
            "comments"
        ],
        "details": {
            "select_related": [
                {
                    "field_name": "author",
                    "target_model": "users.User",
                    "is_recursive": false
                },
                 ...
            ],
            "prefetch_related": [
                {
                    "field_name": "tags",
                    "target_model": "blog.Tag",
                    "is_recursive": false
                },
                {
                    "field_name": "content_object",
                    "target_model": "Generic",
                    "is_recursive": false,
                    "type": "generic"
                },
                ...
            ]
        }
    }
}

How it helps

When writing a view, instead of opening models.py and mentally parsing the relationships, just look at the output. With the --depth argument, you can automatically discover deeply nested relationships that need optimization:

  • Copy fields from "queryset_snippet" -> paste into project.
  • Copy fields from "select_related_fields" -> paste into .select_related(...).
  • Copy fields from "prefetch_related_fields" -> paste into .prefetch_related(...).

Contributing

Pull requests are welcome! For major changes, please open an issue first.

License

MIT

Metadata

Release files for django-model-map 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-model-map 0.4.0
File Size Uploaded
django_model_map-0.4.0.tar.gz 8.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-model-map 0.4.0
File Interpreter ABI Platform
django_model_map-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 18.1 kB

Release files / django_model_map-0.4.0.tar.gz

Download URL django_model_map-0.4.0.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
01482a1f9bf6292e5cbac0f58fa8e2daa9d911534afb1009ae02d2187e2d4963
BLAKE2b-256 checksum
How to use checksums
fcd76aa342325120b7db9bd96d69190b6655e20bb9c63f3d4eb50f959ccee862
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 6, 2026.

Transparency log

Release files / django_model_map-0.4.0-py3-none-any.whl

Download URL django_model_map-0.4.0-py3-none-any.whl
Size 9.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b8d273e55e8d012740f5fab8227e05455fefd0cb447b000ae7fd89c5726bfdef
BLAKE2b-256 checksum
How to use checksums
d45a1807a57dd39c875fcaa2fcc546a5cfb6182e01b7a81387e24e49eba36fb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page