Skip to main content

This project is currently unmaintained

django-mptt works by storing pre-computed left/right/level/tree_id values alongside each row. This makes reads very fast, but it means that every insert, move, or delete must update a potentially large number of sibling and ancestor rows. This write amplification is the fundamental reason the library is hard to maintain: concurrent writes can race and corrupt the tree (see Concurrency), bulk operations bypass the update logic entirely, and any code that touches the database outside of django-mptt (raw SQL, bulk_update, migrations) can leave the tree in an inconsistent state. Rebuilding with rebuild() is the escape hatch, but it rewrites every row, which is slow for large tables.

If you are starting a new project, or can afford to migrate, consider an alternative. Newer databases support recursive Common Table Expressions (CTE), which let you store only a parent FK and compute ancestry on the fly. See django-tree-queries for such an implementation and its announcement blog post. Other alternatives are listed on Django Packages.

django-mptt itself is kept alive on a best-effort basis — bugs get fixed when reported with a clear reproduction, compatibility with new Django versions is maintained, but new features will not be added.

django-mptt

Utilities for implementing Modified Preorder Tree Traversal with your Django Models and working with trees of Model instances.

Build Status

Project home: https://github.com/django-mptt/django-mptt/

Documentation: https://django-mptt.readthedocs.io/

Bug reports: https://github.com/django-mptt/django-mptt/issues

What is Modified Preorder Tree Traversal?

MPTT is a technique for storing hierarchical data in a database. The aim is to make retrieval operations very efficient.

The trade-off for this efficiency is that performing inserts and moving items around the tree are more involved, as there’s some extra work required to keep the tree structure in a good state at all times.

Here are a few articles about MPTT to whet your appetite and provide details about how the technique itself works:

What is django-mptt?

django-mptt is a reusable Django app that aims to make it easy for you to use MPTT with your own Django models.

It takes care of the details of managing a database table as a tree structure and provides tools for working with trees of model instances.

Requirements

Feature overview

  • Simple registration of models - fields required for tree structure will be added automatically.

  • The tree structure is automatically updated when you create or delete model instances, or change an instance’s parent.

  • Each level of the tree is automatically sorted by a field (or fields) of your choice.

  • New model methods are added to each registered model for:

    • changing position in the tree

    • retrieving ancestors, siblings, descendants

    • counting descendants

    • other tree-related operations

  • A TreeManager manager is added to all registered models. This provides methods to:

    • move nodes around a tree, or into a different tree

    • insert a node anywhere in a tree

    • rebuild the MPTT fields for the tree (useful when you do bulk updates outside of Django)

  • Form fields for tree models.

  • Utility functions for tree models.

  • Template tags and filters for rendering trees.

  • Admin classes for visualizing and modifying trees in Django’s administration interface.

Metadata

Release files for django-mptt 0.21.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-mptt 0.21.0
File Size Uploaded Provenance Actions
django_mptt-0.21.0.tar.gz 74.5 kB With provenance Details for django_mptt-0.21.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for django-mptt 0.21.0
File Interpreter ABI Platform Actions
django_mptt-0.21.0-py3-none-any.whl Python 3 none any Details for django_mptt-0.21.0-py3-none-any.whl

Total release size: 196.5 kB

Release files / django_mptt-0.21.0.tar.gz

Download URL django_mptt-0.21.0.tar.gz
Size 74.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0796064448aa874f74a8b35e6f516e489199d37892191f917cc0012850b39363
BLAKE2b-256 checksum
How to use checksums
02bcc9887b8003013bd94957b3d932488e9a66933bf45edcd3a193bc29fbad8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 27, 2026.

Transparency log

Release files / django_mptt-0.21.0-py3-none-any.whl

Download URL django_mptt-0.21.0-py3-none-any.whl
Size 122.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be7ef577f82229a0cf5c29c03cdc041866ab8fafa05c57c8e2b3dada121dcd50
BLAKE2b-256 checksum
How to use checksums
c6f38b393051b4f1b2b0d85f0b2e136fac8bc20bcff24992edf9bb36be9cf23c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 27, 2026.

Transparency log

Security for django-mptt 0.21.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for django_mptt-0.21.0.tar.gz

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 Oct 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.21.0 This release

2 release files Full provenance

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