Frequently Asked Questions
Common questions about upgrading Django projects and sites
Upgrade basics
- Is upgrading Django hard?
- Django is relatively easy to upgrade. There is a particular emphasis on backwards compatibility. Often you only have to make a few changes to how you’re using Django itself between each minor release.
- What's the hardest part of upgrading Django?
- You will spend the majority of your time upgrading the third party Django apps you are using. Third party apps typically use deeper aspects of Django’s APIs that may have changed since you installed the app. Looking at the release notes for your third party dependencies is often the best way to determine what you need to update and to which version.
- Do I really need to upgrade?
- Yes, if you value security and safety in your Django site. Patch releases are trivial to upgrade almost never requiring changes to your code or dependencies. As of September 2026 the supported series are 6.1, 6.0 (security fixes only, until April 2027) and 5.2 LTS (security fixes only, until April 2028). Django 4.2 LTS reached end of life in April 2026, so a site still on 4.2 or older is receiving no security fixes at all. The supported versions list is always current.
- What is the difference between major, minor and patch releases?
- If we use the version X.Y.Z as an example. The Z denotes patch. Y, a minor release. And X, a major release. Patches are small security or bug fixes that should not require any changes on your part. Minor releases add new features and change existing features enough that you will likely need to adjust your code and dependencies a bit. Major releases are just that, major. You will almost certainly have to adjust your code and dependencies.
Versions and support
- What does Django LTS really mean?
- LTS stands for Long Term Support. It means the Django community has agreed to support this version with security and bug fixes for a period of 3 years after its initial release. Django 5.2 LTS (April 2025, supported until April 2028) and Django 6.2 LTS (April 2027, supported until April 2030) are the last two, because DEP 20 retires the LTS designation after them.
- What is DEP 20 and what changes in 2028?
- DEP 20 moves Django from a release every eight months to one feature release a year, starting with Django 2028 in January 2028. It also retires the distinction between regular and LTS releases: every annual release gets three years of support, one year of bugfixes followed by two years of security and data-loss fixes, so three versions are supported at any given time. Each release supports the three most recent Python versions when it ships. You do not have to be ready in January 2028: Django 6.2 LTS ships in April 2027 and is supported until April 2030, so a project that lands there has a full three years to move onto an annual release. See the announcement on djangoproject.com for the full rationale.
- What happened to Django 7.0?
- It became Django 2028. Under DEP 20, releases are named for the year of their feature release rather than numbered X.Y, so what would have been 7.0 is Django 2028, followed by Django 2029 and so on. This lines Django up with Python’s annual October releases. Nothing before the switch is renamed: Django 6.1 and Django 6.2 LTS are the last releases under the old scheme and keep the support windows they were given.
- Should I upgrade the day a new Django version ships?
- Usually not. We like to wait until two or three patch releases into a new major version of Django before we recommend clients move. By then the early regressions have been found and fixed, and the third party packages you depend on have had time to catch up. In practice that means Django 6.1, which shipped August 5, 2026 with 6.1.1 following on September 2, is one to plan for rather than deploy on day one. We would keep clients on 6.0.8 or 5.2 LTS and revisit once 6.1.2 or 6.1.3 is out. For the longer version of this advice, see Which Django and Python versions should I be using today?.
Planning an upgrade
- What's the recommended upgrade path for very old Django projects?
- For projects on very old Django versions (1.x or early 2.x), it’s best to upgrade incrementally through each major version rather than attempting to jump directly to the latest. Start by upgrading to the latest patch release of your current major version, then move to the next major version. For instance, if you’re on Django 1.8, upgrade to 1.11 (last 1.x LTS), then 2.2 (LTS), then 3.2 (LTS), then 4.2 (LTS, end of life April 2026), then 5.2 LTS, and on into the 6.x series. Hopping between LTS releases keeps each step as small as Django’s deprecation policy allows.
- How do I handle deprecated features during an upgrade?
-
Django’s deprecation policy is very clear: features marked as deprecated in version X will be removed in version X+2. When upgrading, check the deprecation warnings in your test suite and update your code to use recommended alternatives. Running your tests with the
python -Waflag will display deprecation warnings that would normally be hidden. - Should I upgrade Django before or after upgrading Python?
- It’s generally easier to upgrade Django first while staying on your current Python version, then upgrade Python afterward. Check Django’s documentation for the Python versions supported by each Django release to ensure compatibility before upgrading either component.
- How do I test my Django upgrade before deploying to production?
- Create a separate branch for the upgrade, update your requirements, run your test suite, and fix any issues. Set up a staging environment that mirrors production as closely as possible, deploy your upgraded code there, and thoroughly test all features. Consider enabling Django’s deprecation warnings during this phase to catch any potential future issues.
Django version history
- Which version of Django is async?
- Async views and middleware were introduced in version 3.1. Django 4.0 added async for the cache system. Initial support for asynchronous ORM support was added in Django 4.1.
- Which version of Django was the last to support Python 2?
- Django 1.11 was the last version of Django to support Python 2. However, support for that version ended December 1st, 2017.