A Django implementation for PostgreSQL's ltree extension, providing efficient storage and querying of hierarchical tree-like data.
See PostgreSQL's ltree documentation to learn more about it.
The main benefits of ltree
:
- Efficient path queries (ancestors, descendants, pattern matching)
- Index-friendly hierarchical storage
- Powerful label path searching
- Native PostgreSQL performance for tree operations
- Django model fields for ltree data types
- Query utilities for common tree operations
- Migration support for ltree extension installation
- Compatibility with Django's ORM and query syntax
- Django 4.2+
- Python 3.11+
- PostgreSQL 14+ (with ltree extension enabled)
-
Install the package:
pip install django-ltree
-
Add to your
INSTALLED_APPS
:INSTALLED_APPS = [ ... "django_ltree", ... ]
-
Run migrations to install the ltree extension:
python manage.py migrate django_ltree
-
Alternatively you can avoid install the application, and create the the extensions with a custom migration in an app in your project.
from django.db import migrations from django_ltree.operations import LtreeExtension class Migration(migrations.Migration): initial = True dependencies = [] operations = [LtreeExtension()]
-
Add a PathField to your model:
from django_ltree.fields import PathField class Category(models.Model): name = models.CharField(max_length=50) path = PathField()
-
Create tree nodes:
root = Category.objects.create(name="Root", path="root") child = Category.objects.create(name="Child", path=f"{root.path}.child")
-
Query ancestors and descendants:
# Get all ancestors Category.objects.filter(path__ancestor=child.path) # Get all descendants Category.objects.filter(path__descendant=root.path)
Include django_ltree as a dependency in your app's migrations:
class Migration(migrations.Migration):
dependencies = [
("django_ltree", "__latest__"),
]
For complete documentation, see [TODO: Add Documentation Link].
- Source Code: https://github.com/mariocesar/django-ltree
- Bug Reports: https://github.com/mariocesar/django-ltree/issues
- PyPI Package: https://pypi.org/project/django-ltree/
- PostgreSQL ltree Docs: https://www.postgresql.org/docs/current/ltree.html
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.