1.11 released 4 April 2017, latest 1.11.29.
Django 1.11 reached end of life on 1 April 2020.
What changed
Django 1.11 added database-expression capabilities that made more complex SQL practical through the ORM, including Subquery and OuterRef expressions, and added QuerySet union(), intersection(), and difference() operations. It introduced the Meta.indexes option and the Index class for declaring database indexes in models. Form widget rendering moved toward template-based rendering, allowing widget templates and custom renderers rather than relying solely on Python-generated HTML. The release also expanded PostgreSQL integration and made a number of smaller ORM, admin, template, and request-handling improvements. It is the final Django line that supports Python 2.7, which made it a common holding point for applications with a legacy Python runtime.
What staying costs
Django 1.11 has reached end of life, so Django no longer provides security fixes, bug fixes, or compatibility updates for it. An application remaining on this line must absorb the risk of unpatched framework vulnerabilities and may have difficulty meeting security, audit, or vendor requirements. Its Python 2.7 compatibility can also preserve a dependency on an obsolete runtime and its ecosystem. Third-party packages increasingly drop compatibility with both this Django version and older Python versions, leaving teams to pin old dependencies, maintain local patches, or forgo fixes and features. Infrastructure upgrades can expose further risk when database drivers, application servers, operating-system packages, browsers, or database versions no longer behave as the application expects.
What to do
Inventory the deployed Python version, Django patch level, database backend, middleware, installed apps, and pinned dependencies before selecting a target. Upgrade to the latest available patch release within the 1.11 line first, run the full test suite, and resolve warnings and application-specific compatibility issues while the baseline is still known. Plan a Python 3 migration as a prerequisite or an early workstream, because supported Django releases require it. Move through compatible maintained Django release lines in deliberate steps rather than attempting an untested jump, following each line's documented deprecations and upgrade notes. Test ORM queries, migrations, authentication and session flows, admin customizations, template and widget rendering, URL handling, static files, and production middleware under the new runtime. Replace dependencies that cannot support the chosen Django and Python target, deploy through a staging environment with production-like data and services, and retain a tested rollback plan for the application and database migration.
We can tell you what moving off Django 1.11 involves.
What it takes to move off Django 1.11 depends on what you built on it — the version you are on, how much depends on it, and how much of the work is mechanical. Leave your email with this version and we can tell you what that looks like for you.
Not sure yet? Get my plan
