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.1

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.1
File Size Uploaded Provenance Actions
django_mptt-0.21.1.tar.gz 74.4 kB With provenance Details for django_mptt-0.21.1.tar.gz

Built distribution (wheel)

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

Total release size: 196.4 kB

Release files / django_mptt-0.21.1.tar.gz

Download URL django_mptt-0.21.1.tar.gz
Size 74.4 kB
Tags Source
SHA-256 checksum
How to use checksums
dda7e42bce6dc77bccef44c5c58263c435bf7b7272ea8534e194c355fc73c746
BLAKE2b-256 checksum
How to use checksums
930aa78da1ff3ef753c9eedeede0c84fb641eabf680fd375767c58232cf227d7
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 Nov 3, 2026.

Transparency log

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

Download URL django_mptt-0.21.1-py3-none-any.whl
Size 122.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6f4dc3d26f0e0422fb185698a03351e7200b2a1222969af879e383adc4c292b8
BLAKE2b-256 checksum
How to use checksums
78f7abeb943f2b42ab375463a0d30162043cd39154283a3219aaa9d966c0a80f
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 Nov 3, 2026.

Transparency log

Security for django-mptt 0.21.1

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.1.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 Nov 3, 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.1 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