Django 5.2 LTS: Preparing for the Long Haul

python backend django

April 2025 brings Django 5.2 LTS—the next long-term support release. After three years on Django 4.2 LTS, it’s time to plan your upgrade. Here’s what’s coming and how to prepare.

The LTS Cadence

Django’s release cycle:

VersionReleaseEnd of Support
4.2 LTSApr 2023Apr 2026
5.2 LTSApr 2025Apr 2028

If you’re on 4.2 LTS, you have until April 2026 to migrate. But don’t wait.

Expected Features in 5.2 LTS

From Django 5.0

Facet counts in admin: Filter counts displayed automatically.

Simplified form field rendering: as_field_group() for complete field HTML.

Database-computed default values: db_default on model fields.

class Article(models.Model):
    created_at = models.DateTimeField(db_default=Now())
    slug = models.SlugField(db_default=Lower(F('title')))

Field groups in templates:

{{ form.as_field_group }}
<!-- Renders label, widget, help text, and errors together -->

From Django 5.1

LoginRequiredMiddleware: Global login requirement.

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.LoginRequiredMiddleware',
]

# Opt-out specific views
from django.contrib.auth.decorators import login_not_required

@login_not_required
def public_view(request):
    ...

Native PostgreSQL connection pooling:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'OPTIONS': {
            'pool': True,
        },
    },
}

No more Pgbouncer for basic pooling.

Async queryset iteration:

async for article in Article.objects.filter(published=True):
    await process_article(article)

From Django 5.2

Expected features (based on roadmap):

Upgrade Path

Step 1: Audit Current State

# Check Django version
python -c "import django; print(django.VERSION)"

# Check for deprecation warnings
python -Wd manage.py test

Step 2: Handle Deprecations

Django 5.x removed features deprecated in 4.x:

# Removed in 5.0
# - url() function (use path() or re_path())
# - USE_L10N setting (always True now)
# - django.utils.encoding.force_text (use force_str)

# Update imports
from django.utils.encoding import force_str  # not force_text

Step 3: Python Version

Django 5.2 requires Python 3.10+. Check your Python version:

python --version
# Must be 3.10 or higher

Step 4: Update Dependencies

Many packages need updates for Django 5.x:

# Check compatibility
pip list --outdated

# Update packages
pip install --upgrade django-rest-framework
pip install --upgrade django-allauth
pip install --upgrade celery

Step 5: Test Thoroughly

# Run full test suite with warnings
python -Wd manage.py test

# Check for compatibility issues
./manage.py check --deploy

Common Migration Issues

Form Field Rendering

The default.html template changed. Custom form templates may need updates.

Admin Changes

Facet counts and filter changes may affect custom admin classes.

Middleware Order

LoginRequiredMiddleware must come after AuthenticationMiddleware.

Database Defaults

db_default interacts differently with migrations than default.

Staying on 4.2 LTS

If you can’t migrate yet:

Create a migration plan now, even if execution is later.

Migration Checklist

## Django 5.2 LTS Migration

### Pre-Migration
- [ ] Document current Django version
- [ ] Run test suite—all passing
- [ ] Audit deprecation warnings
- [ ] Check Python version (need 3.10+)
- [ ] Review third-party package compatibility

### Migration Steps
- [ ] Upgrade to Django 5.0 first
- [ ] Fix deprecation warnings
- [ ] Upgrade to Django 5.1
- [ ] Fix new deprecation warnings
- [ ] Upgrade to Django 5.2 LTS
- [ ] Full regression testing

### Post-Migration
- [ ] Update CI/CD configurations
- [ ] Update documentation
- [ ] Monitor production for issues
- [ ] Remove deprecated code patterns

New Project Recommendations

Starting a new project? Use Django 5.1 now, then update to 5.2 LTS in April:

pip install Django>=5.1,<5.2
django-admin startproject myproject

Or wait for 5.2 LTS if launch is after April 2025.

Final Thoughts

LTS upgrades are the time to modernize. Don’t just make it work—take advantage of new features.

The Django team makes upgrades smooth. Follow the deprecation warnings, update incrementally, and test thoroughly.

April 2025 is coming. Start planning now.


LTS: Long-Term Stability for Long-Term Success.

All posts