Django Extensions is a comprehensive collection of custom extensions that enhance the Django web framework with additional management commands, utilities, and developer tools.
npx @tessl/cli install tessl/pypi-django-extensions@3.2.0A comprehensive collection of custom extensions that enhance the Django web framework with additional management commands, utilities, and developer tools. Django Extensions provides powerful debugging and development commands, custom model fields, validators, template tags, and administrative utilities that streamline the Django development workflow.
pip install django-extensions# Add to INSTALLED_APPS in settings.py
INSTALLED_APPS = [
'django_extensions',
# ... your other apps
]Common imports for models and fields:
from django_extensions.db.models import TimeStampedModel, TitleSlugDescriptionModel
from django_extensions.db.fields import AutoSlugField, CreationDateTimeFieldFor validators:
from django_extensions.validators import NoControlCharactersValidator, NoWhitespaceValidator, HexValidatorFor admin extensions:
from django_extensions.admin import ForeignKeyAutocompleteAdmin, NullFieldListFilter, ForeignKeySearchInput# Using TimeStampedModel base class
from django.db import models
from django_extensions.db.models import TimeStampedModel
class Article(TimeStampedModel):
title = models.CharField(max_length=200)
content = models.TextField()
# created and modified fields are automatically added
# Using AutoSlugField
from django_extensions.db.fields import AutoSlugField
class Post(models.Model):
title = models.CharField(max_length=200)
slug = AutoSlugField(populate_from='title')
# Using management commands
# python manage.py shell_plus # Enhanced shell with models loaded
# python manage.py show_urls # Display all URL patterns
# python manage.py graph_models # Generate model diagramsDjango Extensions extends Django through several key mechanisms:
Django Extensions provides 44+ management commands for development, debugging, database operations, and administrative tasks. These commands enhance Django's built-in management system with powerful utilities for developers.
# Key management commands (accessed via python manage.py <command>):
# shell_plus - Enhanced shell with auto-imported models
# show_urls - Display all URL patterns
# graph_models - Generate model relationship diagrams
# runserver_plus - Enhanced development server
# reset_db - Reset database
# dumpscript - Export data as Python scriptCustom model fields that extend Django's field types with specialized functionality including auto-generated slugs, timestamps, UUIDs, and JSON data handling.
class AutoSlugField(SlugField):
def __init__(self, populate_from=None, separator='-', overwrite=False, **kwargs): ...
class CreationDateTimeField(DateTimeField): ...
class ModificationDateTimeField(DateTimeField): ...
class RandomCharField(CharField): ...
class JSONField(TextField): ...Abstract model classes providing common functionality patterns including timestamps, activation status, and title/description/slug combinations.
class TimeStampedModel(models.Model):
created: CreationDateTimeField
modified: ModificationDateTimeField
class Meta:
abstract = True
class ActivatorModel(models.Model):
status: int
activate_date: DateTimeField
deactivate_date: DateTimeField
objects: ActivatorModelManager
class Meta:
abstract = TrueCustom validation classes for field-level validation including control character prevention, whitespace validation, and hexadecimal string validation.
class NoControlCharactersValidator:
def __init__(self, message=None, code=None, whitelist=None): ...
def __call__(self, value): ...
class HexValidator:
def __init__(self, length=None, min_length=None, max_length=None, **kwargs): ...
def __call__(self, value): ...Template tag libraries providing debugging capabilities, syntax highlighting, text formatting, and typography enhancements for Django templates.
# Template tags available after {% load <library> %}
# debugger_tags: {% ipdb %}, {% pdb %}, {% wdb %}
# highlighting: {% highlight "python" %}code{% endhighlight %}
# syntax_color: {{ code|colorize:"python" }}
# widont: {{ text|widont }}Enhanced Django admin functionality including custom filters and widgets for improved administrative interfaces.
class ForeignKeySearchInput(widgets.Input):
def __init__(self, rel, admin_site, attrs=None, using=None): ...
class NullFieldListFilter(admin.SimpleListFilter): ...# Field Options Types
FieldOptions = dict[str, Any] # Django field kwargs
# Validator Types
ValidationError = django.core.exceptions.ValidationError
# Model Manager Types
QuerySet = django.db.models.QuerySet
Manager = django.db.models.Manager
# Status Constants (ActivatorModel)
INACTIVE_STATUS: int = 0
ACTIVE_STATUS: int = 1
STATUS_CHOICES: tuple[tuple[int, str], ...] = (
(INACTIVE_STATUS, 'Inactive'),
(ACTIVE_STATUS, 'Active')
)