Expected December 2025
Welcome to Django 6.0!
These release notes cover the new features, as well as some backwards incompatible changes you’ll want to be aware of when upgrading from Django 5.2 or earlier. We’ve begun the deprecation process for some features.
See the How to upgrade Django to a newer version guide if you’re updating an existing project.
Django 6.0 supports Python 3.12 and 3.13. We highly recommend and only officially support the latest release of each series.
Following the release of Django 6.0, we suggest that third-party app authors
drop support for all versions of Django prior to 5.2. At that time, you should
be able to run your package’s tests using python -Wd
so that deprecation
warnings appear. After making the deprecation warning fixes, your app should be
compatible with Django 6.0.
django.contrib.admin
¶…
django.contrib.admindocs
¶…
django.contrib.auth
¶The default iteration count for the PBKDF2 password hasher is increased from 1,000,000 to 1,200,000.
django.contrib.contenttypes
¶…
django.contrib.gis
¶…
django.contrib.messages
¶…
django.contrib.postgres
¶…
django.contrib.redirects
¶…
django.contrib.sessions
¶…
django.contrib.sitemaps
¶…
django.contrib.sites
¶…
django.contrib.staticfiles
¶…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
This section describes changes that may be needed in third-party database backends.
…
…
…
These features have reached the end of their deprecation cycle and are removed in Django 6.0.
See Features deprecated in 5.0 for details on these changes, including how to remove usage of these features.
Support for passing positional arguments to BaseConstraint
is removed.
The DjangoDivFormRenderer
and Jinja2DivFormRenderer
transitional form
renderers are removed.
BaseDatabaseOperations.field_cast_sql()
is removed.
request
is required in the signature of ModelAdmin.lookup_allowed()
subclasses.
Support for calling format_html()
without passing args or kwargs is
removed.
The default scheme for forms.URLField
changed from "http"
to
"https"
.
The FORMS_URLFIELD_ASSUME_HTTPS
transitional setting is removed.
The django.db.models.sql.datastructures.Join
no longer fallback to
get_joining_columns()
.
The get_joining_columns()
method of ForeignObject
and
ForeignObjectRel
is removed.
The ForeignObject.get_reverse_joining_columns()
method is be removed.
Support for cx_Oracle
is removed.
The ChoicesMeta
alias to django.db.models.enums.ChoicesType
is
removed.
The Prefetch.get_current_queryset()
method is removed.
The get_prefetch_queryset()
method of related managers and descriptors is
removed.
get_prefetcher()
and prefetch_related_objects()
no longer fallback to
get_prefetch_queryset()
.
See Features deprecated in 5.1 for details on these changes, including how to remove usage of these features.
django.urls.register_converter()
no longer allows overriding existing
converters.
The ModelAdmin.log_deletion()
and LogEntryManager.log_action()
methods are removed.
The undocumented django.utils.itercompat.is_iterable()
function and the
django.utils.itercompat
module is removed.
The django.contrib.gis.geoip2.GeoIP2.coords()
method is removed.
The django.contrib.gis.geoip2.GeoIP2.open()
method is removed.
Support for passing positional arguments to Model.save()
and
Model.asave()
is removed.
The setter for django.contrib.gis.gdal.OGRGeometry.coord_dim
is removed.
The check
keyword argument of CheckConstraint
is removed.
The get_cache_name()
method of FieldCacheMixin
is removed.
The OS_OPEN_FLAGS
attribute of
FileSystemStorage
is removed.
Jan 16, 2025