Django Deprecation Timeline¶
This document outlines when various pieces of Django will be removed or altered in a backward incompatible way, following their deprecation, as per the deprecation policy. More details about each item can often be found in the release notes of two versions prior.
7.0¶
See the Django 6.0 release notes for more details on these changes.
- The - serializekeyword argument of- BaseDatabaseCreation.create_test_db()will be removed.
- The - django.contrib.postgres.aggregates.StringAggclass will be removed.
- The - django.contrib.postgres.aggregates.mixins.OrderableAggMixinclass will be removed.
- The default protocol in - urlizeand- urlizetrunctemplate filters will change from HTTP to HTTPS.
- The - URLIZE_ASSUME_HTTPStransitional setting will be removed.
- Using a percent sign in a column alias or annotation will raise - ValueError.
- Support for setting the - ADMINSor- MANAGERSsettings to a list of (name, address) tuples will be removed.
- The - orphansargument being larger than or equal to the- per_pageargument of- django.core.paginator.Paginatorand- django.core.paginator.AsyncPaginatorwill no longer be allowed.
- The - django.core.mailAPIs will no longer accept certain parameters as positional arguments. These must be passed as keyword arguments instead.
- Support for passing Python’s legacy email - email.mime.base.MIMEBaseobject to- EmailMessage.attach()(or including one in the message’s- attachmentslist) will be removed.
- The - django.core.mail.BadHeaderErrorexception will be removed.
- The - django.core.mail.SafeMIMETextand- SafeMIMEMultipartclasses will be removed.
- The - django.core.mail.forbid_multi_line_headers()and- django.core.mail.message.sanitize_address()functions will be removed.
See the Django 6.1 release notes for more details on these changes.
- Calling - QuerySet.values_list()with- flat=Trueand no field name will raise- TypeError.
6.1¶
See the Django 5.2 release notes for more details on these changes.
- The - allkeyword argument of- django.contrib.staticfiles.finders.find()will be removed.
- Fallbacks to - request.userand- request.auser()when- useris- Nonein- django.contrib.auth.login()and- django.contrib.auth.alogin(), respectively, will be removed.
- The - orderingkeyword argument of the PostgreSQL specific aggregation functions- django.contrib.postgres.aggregates.ArrayAgg,- django.contrib.postgres.aggregates.JSONBAgg, and- django.contrib.postgres.aggregates.StringAggwill be removed.
- Support for subclasses of - RemoteUserMiddlewarethat override- process_request()without overriding- aprocess_request()will be removed.
6.0¶
See the Django 5.0 release notes for more details on these changes.
- The - DjangoDivFormRendererand- Jinja2DivFormRenderertransitional form renderers will be removed.
- Support for passing positional arguments to - BaseConstraintwill be removed.
- requestwill be required in the signature of- ModelAdmin.lookup_allowed()subclasses.
- The - django.db.models.sql.datastructures.Joinwill no longer fallback to- get_joining_columns().
- The - get_joining_columns()method of- ForeignObjectand- ForeignObjectRelwill be removed.
- The - ForeignObject.get_reverse_joining_columns()method will be removed.
- The default scheme for - forms.URLFieldwill change from- "http"to- "https".
- Support for calling - format_html()without passing args or kwargs will be removed.
- Support for - cx_Oraclewill be removed.
- BaseDatabaseOperations.field_cast_sql()will be removed.
- The - ChoicesMetaalias to- django.db.models.enums.ChoicesTypewill be removed.
- The - Prefetch.get_current_queryset()method will be removed.
- The - get_prefetch_queryset()method of related managers and descriptors will be removed.
- get_prefetcher()and- prefetch_related_objects()will no longer fallback to- get_prefetch_queryset().
- The - FORMS_URLFIELD_ASSUME_HTTPStransitional setting will be removed.
See the Django 5.1 release notes for more details on these changes.
- The - ModelAdmin.log_deletion()and- LogEntryManager.log_action()methods will be removed.
- The undocumented - django.utils.itercompat.is_iterable()function and the- django.utils.itercompatmodule will be removed.
- The - django.contrib.gis.geoip2.GeoIP2.coords()method will be removed.
- The - django.contrib.gis.geoip2.GeoIP2.open()method will be removed.
- Support for passing positional arguments to - Model.save()and- Model.asave()will be removed.
- The setter for - django.contrib.gis.gdal.OGRGeometry.coord_dimwill be removed.
- django.urls.register_converter()will no longer allow overriding existing converters.
- The - checkkeyword argument of- CheckConstraintwill be removed.
- The - OS_OPEN_FLAGSattribute of- FileSystemStoragewill be removed.
- The - get_cache_name()method of- FieldCacheMixinwill be removed.
5.1¶
See the Django 4.2 release notes for more details on these changes.
- The - BaseUserManager.make_random_password()method will be removed.
- The model’s - Meta.index_togetheroption will be removed.
- The - length_istemplate filter will be removed.
- The - django.contrib.auth.hashers.SHA1PasswordHasher,- django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher, and- django.contrib.auth.hashers.UnsaltedMD5PasswordHasherwill be removed.
- The model - django.contrib.postgres.fields.CICharField,- django.contrib.postgres.fields.CIEmailField, and- django.contrib.postgres.fields.CITextFieldwill be removed. Stub fields will remain for compatibility with historical migrations.
- The - django.contrib.postgres.fields.CITextmixin will be removed.
- The - map_widthand- map_heightattributes of- BaseGeometryWidgetwill be removed.
- The - SimpleTestCase.assertFormsetError()method will be removed.
- The - TransactionTestCase.assertQuerysetEqual()method will be removed.
- Support for passing encoded JSON string literals to - JSONFieldand associated lookups and expressions will be removed.
- Support for passing positional arguments to - Signerand- TimestampSignerwill be removed.
- The - DEFAULT_FILE_STORAGEand- STATICFILES_STORAGEsettings will be removed.
- The - django.core.files.storage.get_storage_class()function will be removed.
5.0¶
See the Django 4.0 release notes for more details on these changes.
- The - SERIALIZEtest setting will be removed.
- The undocumented - django.utils.baseconvmodule will be removed.
- The undocumented - django.utils.datetime_safemodule will be removed.
- The default value of the - USE_TZsetting will change from- Falseto- True.
- The default sitemap protocol for sitemaps built outside the context of a request will change from - 'http'to- 'https'.
- The - extra_testsargument for- DiscoverRunner.build_suite()and- DiscoverRunner.run_tests()will be removed.
- The - django.contrib.postgres.aggregates.ArrayAgg,- JSONBAgg, and- StringAggaggregates will return- Nonewhen there are no rows instead of- [],- [], and- ''respectively.
- The - USE_L10Nsetting will be removed.
- The - USE_DEPRECATED_PYTZtransitional setting will be removed.
- Support for - pytztimezones will be removed.
- The - is_dstargument will be removed from:- QuerySet.datetimes()
- django.utils.timezone.make_aware()
- django.db.models.functions.Trunc()
- django.db.models.functions.TruncSecond()
- django.db.models.functions.TruncMinute()
- django.db.models.functions.TruncHour()
- django.db.models.functions.TruncDay()
- django.db.models.functions.TruncWeek()
- django.db.models.functions.TruncMonth()
- django.db.models.functions.TruncQuarter()
- django.db.models.functions.TruncYear()
 
- The - django.contrib.gis.admin.GeoModelAdminand- OSMGeoAdminclasses will be removed.
- The undocumented - BaseForm._html_output()method will be removed.
- The ability to return a - str, rather than a- SafeString, when rendering an- ErrorDictand- ErrorListwill be removed.
See the Django 4.1 release notes for more details on these changes.
- The - SitemapIndexItem.__str__()method will be removed.
- The - CSRF_COOKIE_MASKEDtransitional setting will be removed.
- The - nameargument of- django.utils.functional.cached_property()will be removed.
- The - opclassesargument of- django.contrib.postgres.constraints.ExclusionConstraintwill be removed.
- The undocumented ability to pass - errors=Noneto- SimpleTestCase.assertFormError()and- assertFormsetError()will be removed.
- django.contrib.sessions.serializers.PickleSerializerwill be removed.
- The usage of - QuerySet.iterator()on a queryset that prefetches related objects without providing the- chunk_sizeargument will no longer be allowed.
- Passing unsaved model instances to related filters will no longer be allowed. 
- created=Truewill be required in the signature of- RemoteUserBackend.configure_user()subclasses.
- Support for logging out via - GETrequests in the- django.contrib.auth.views.LogoutViewand- django.contrib.auth.views.logout_then_login()will be removed.
- The - django.utils.timezone.utcalias to- datetime.timezone.utcwill be removed.
- Passing a response object and a form/formset name to - SimpleTestCase.assertFormError()and- assertFormsetError()will no longer be allowed.
- The - django.contrib.gis.admin.OpenLayersWidgetwill be removed.
- The - django.contrib.auth.hashers.CryptPasswordHasherwill be removed.
- The - "django/forms/default.html"and- "django/forms/formsets/default.html"templates will be removed.
- The ability to pass - nulls_first=Falseor- nulls_last=Falseto- Expression.asc()and- Expression.desc()methods, and the- OrderByexpression will be removed.
4.1¶
See the Django 3.2 release notes for more details on these changes.
- Support for assigning objects which don’t support creating deep copies with - copy.deepcopy()to class attributes in- TestCase.setUpTestData()will be removed.
- BaseCommand.requires_system_checkswon’t support boolean values.
- The - whitelistargument and- domain_whitelistattribute of- django.core.validators.EmailValidatorwill be removed.
- The - default_app_configmodule variable will be removed.
- TransactionTestCase.assertQuerysetEqual()will no longer automatically call- repr()on a queryset when compared to string values.
- django.core.cache.backends.memcached.MemcachedCachewill be removed.
- Support for the pre-Django 3.2 format of messages used by - django.contrib.messages.storage.cookie.CookieStoragewill be removed.
4.0¶
See the Django 3.0 release notes for more details on these changes.
- django.utils.http.urlquote(),- urlquote_plus(),- urlunquote(), and- urlunquote_plus()will be removed.
- django.utils.encoding.force_text()and- smart_text()will be removed.
- django.utils.translation.ugettext(),- ugettext_lazy(),- ugettext_noop(),- ungettext(), and- ungettext_lazy()will be removed.
- django.views.i18n.set_language()will no longer set the user language in- request.session(key- django.utils.translation.LANGUAGE_SESSION_KEY).
- alias=Nonewill be required in the signature of- django.db.models.Expression.get_group_by_cols()subclasses.
- django.utils.text.unescape_entities()will be removed.
- django.utils.http.is_safe_url()will be removed.
See the Django 3.1 release notes for more details on these changes.
- The - PASSWORD_RESET_TIMEOUT_DAYSsetting will be removed.
- The undocumented usage of the - isnulllookup with non-boolean values as the right-hand side will no longer be allowed.
- The - django.db.models.query_utils.InvalidQueryexception class will be removed.
- The - django-admin.pyentry point will be removed.
- The - HttpRequest.is_ajax()method will be removed.
- Support for the pre-Django 3.1 encoding format of cookies values used by - django.contrib.messages.storage.cookie.CookieStoragewill be removed.
- Support for the pre-Django 3.1 password reset tokens in the admin site (that use the SHA-1 hashing algorithm) will be removed. 
- Support for the pre-Django 3.1 encoding format of sessions will be removed. 
- Support for the pre-Django 3.1 - django.core.signing.Signersignatures (encoded with the SHA-1 algorithm) will be removed.
- Support for the pre-Django 3.1 - django.core.signing.dumps()signatures (encoded with the SHA-1 algorithm) in- django.core.signing.loads()will be removed.
- Support for the pre-Django 3.1 user sessions (that use the SHA-1 algorithm) will be removed. 
- The - get_responseargument for- django.utils.deprecation.MiddlewareMixin.__init__()will be required and won’t accept- None.
- The - providing_argsargument for- django.dispatch.Signalwill be removed.
- The - lengthargument for- django.utils.crypto.get_random_string()will be required.
- The - listmessage for- ModelMultipleChoiceFieldwill be removed.
- Support for passing raw column aliases to - QuerySet.order_by()will be removed.
- The model - NullBooleanFieldwill be removed. A stub field will remain for compatibility with historical migrations.
- django.conf.urls.url()will be removed.
- The model - django.contrib.postgres.fields.JSONFieldwill be removed. A stub field will remain for compatibility with historical migrations.
- django.contrib.postgres.forms.JSONField,- django.contrib.postgres.fields.jsonb.KeyTransform, and- django.contrib.postgres.fields.jsonb.KeyTextTransformwill be removed.
- The - {% ifequal %}and- {% ifnotequal %}template tags will be removed.
- The - DEFAULT_HASHING_ALGORITHMtransitional setting will be removed.
3.1¶
See the Django 2.2 release notes for more details on these changes.
- django.utils.timezone.FixedOffsetwill be removed.
- django.core.paginator.QuerySetPaginatorwill be removed.
- A model’s - Meta.orderingwill no longer affect- GROUP BYqueries.
- django.contrib.postgres.fields.FloatRangeFieldand- django.contrib.postgres.forms.FloatRangeFieldwill be removed.
- The - FILE_CHARSETsetting will be removed.
- django.contrib.staticfiles.storage.CachedStaticFilesStoragewill be removed.
- RemoteUserBackend.configure_user()will require- requestas the first positional argument.
- Support for - SimpleTestCase.allow_database_queriesand- TransactionTestCase.multi_dbwill be removed.
3.0¶
See the Django 2.0 release notes for more details on these changes.
- The - django.db.backends.postgresql_psycopg2module will be removed.
- django.shortcuts.render_to_response()will be removed.
- The - DEFAULT_CONTENT_TYPEsetting will be removed.
- HttpRequest.xreadlines()will be removed.
- Support for the - contextargument of- Field.from_db_value()and- Expression.convert_value()will be removed.
- The - field_namekeyword argument of- QuerySet.earliest()and- latest()will be removed.
See the Django 2.1 release notes for more details on these changes.
- django.contrib.gis.db.models.functions.ForceRHRwill be removed.
- django.utils.http.cookie_date()will be removed.
- The - staticfilesand- admin_statictemplate tag libraries will be removed.
- django.contrib.staticfiles.templatetags.static()will be removed.
- The shim to allow - InlineModelAdmin.has_add_permission()to be defined without an- objargument will be removed.
2.1¶
See the Django 1.11 release notes for more details on these changes.
- contrib.auth.views.login(),- logout(),- password_change(),- password_change_done(),- password_reset(),- password_reset_done(),- password_reset_confirm(), and- password_reset_complete()will be removed.
- The - extra_contextparameter of- contrib.auth.views.logout_then_login()will be removed.
- django.test.runner.setup_databases()will be removed.
- django.utils.translation.string_concat()will be removed.
- django.core.cache.backends.memcached.PyLibMCCachewill no longer support passing- pylibmcbehavior settings as top-level attributes of- OPTIONS.
- The - hostparameter of- django.utils.http.is_safe_url()will be removed.
- Silencing of exceptions raised while rendering the - {% include %}template tag will be removed.
- DatabaseIntrospection.get_indexes()will be removed.
- The - authenticate()method of authentication backends will require- requestas the first positional argument.
- The - django.db.models.permalink()decorator will be removed.
- The - USE_ETAGSsetting will be removed.- CommonMiddlewareand- django.utils.cache.patch_response_headers()will no longer set ETags.
- The - Model._meta.has_auto_fieldattribute will be removed.
- url()’s support for inline flags in regular expression groups (- (?i),- (?L),- (?m),- (?s), and- (?u)) will be removed.
- Support for - Widget.render()methods without the- rendererargument will be removed.
2.0¶
See the Django 1.9 release notes for more details on these changes.
- The - weakargument to- django.dispatch.signals.Signal.disconnect()will be removed.
- django.db.backends.base.BaseDatabaseOperations.check_aggregate_support()will be removed.
- The - django.forms.extraspackage will be removed.
- The - assignment_taghelper will be removed.
- The - hostargument to- assertsRedirectswill be removed. The compatibility layer which allows absolute URLs to be considered equal to relative ones when the path is identical will also be removed.
- Field.relwill be removed.
- Field.remote_field.toattribute will be removed.
- The - on_deleteargument for- ForeignKeyand- OneToOneFieldwill be required.
- django.db.models.fields.add_lazy_relation()will be removed.
- When time zone support is enabled, database backends that don’t support time zones won’t convert aware datetimes to naive values in UTC anymore when such values are passed as parameters to SQL queries executed outside of the ORM, e.g. with - cursor.execute().
- The - django.contrib.auth.tests.utils.skipIfCustomUser()decorator will be removed.
- The - GeoManagerand- GeoQuerySetclasses will be removed.
- The - django.contrib.gis.geoipmodule will be removed.
- The - supports_recursioncheck for template loaders will be removed from:- django.template.engine.Engine.find_template()
- django.template.loader_tags.ExtendsNode.find_template()
- django.template.loaders.base.Loader.supports_recursion()
- django.template.loaders.cached.Loader.supports_recursion()
 
- The - load_template()and- load_template_sources()template loader methods will be removed.
- The - template_dirsargument for template loaders will be removed:- django.template.loaders.base.Loader.get_template()
- django.template.loaders.cached.Loader.cache_key()
- django.template.loaders.cached.Loader.get_template()
- django.template.loaders.cached.Loader.get_template_sources()
- django.template.loaders.filesystem.Loader.get_template_sources()
 
- The - django.template.loaders.base.Loader.__call__()method will be removed.
- Support for custom error views with a single positional parameter will be dropped. 
- The - mime_typeattribute of- django.utils.feedgenerator.Atom1Feedand- django.utils.feedgenerator.RssFeedwill be removed in favor of- content_type.
- The - app_nameargument to- django.conf.urls.include()will be removed.
- Support for passing a 3-tuple as the first argument to - include()will be removed.
- Support for setting a URL instance namespace without an application namespace will be removed. 
- Field._get_val_from_obj()will be removed in favor of- Field.value_from_object().
- django.template.loaders.eggs.Loaderwill be removed.
- The - current_appparameter to the- contrib.authviews will be removed.
- The - callable_objkeyword argument to- SimpleTestCase.assertRaisesMessage()will be removed.
- Support for the - allow_tagsattribute on- ModelAdminmethods will be removed.
- The - enclosurekeyword argument to- SyndicationFeed.add_item()will be removed.
- The - django.template.loader.LoaderOriginand- django.template.base.StringOriginaliases for- django.template.base.Originwill be removed.
See the Django 1.10 release notes for more details on these changes.
- The - makemigrations --exitoption will be removed.
- Support for direct assignment to a reverse foreign key or many-to-many relation will be removed. 
- The - get_srid()and- set_srid()methods of- django.contrib.gis.geos.GEOSGeometrywill be removed.
- The - get_x(),- set_x(),- get_y(),- set_y(),- get_z(), and- set_z()methods of- django.contrib.gis.geos.Pointwill be removed.
- The - get_coords()and- set_coords()methods of- django.contrib.gis.geos.Pointwill be removed.
- The - cascaded_unionproperty of- django.contrib.gis.geos.MultiPolygonwill be removed.
- django.utils.functional.allow_lazy()will be removed.
- The - shell --plainoption will be removed.
- The - django.core.urlresolversmodule will be removed.
- The model - CommaSeparatedIntegerFieldwill be removed. A stub field will remain for compatibility with historical migrations.
- Support for the template - Context.has_key()method will be removed.
- Support for the - django.core.files.storage.Storage.accessed_time(),- created_time(), and- modified_time()methods will be removed.
- Support for query lookups using the model name when - Meta.default_related_nameis set will be removed.
- The - __searchquery lookup and the- DatabaseOperations.fulltext_search_sql()method will be removed.
- The shim for supporting custom related manager classes without a - _apply_rel_filters()method will be removed.
- Using - User.is_authenticated()and- User.is_anonymous()as methods will no longer be supported.
- The private attribute - virtual_fieldsof- Model._metawill be removed.
- The private keyword arguments - virtual_onlyin- Field.contribute_to_class()and- virtualin- Model._meta.add_field()will be removed.
- The - javascript_catalog()and- json_catalog()views will be removed.
- The - django.contrib.gis.utils.precision_wkt()function will be removed.
- In multi-table inheritance, implicit promotion of a - OneToOneFieldto a- parent_linkwill be removed.
- Support for - Widget._format_value()will be removed.
- FileFieldmethods- get_directory_name()and- get_filename()will be removed.
- The - mark_for_escaping()function and the classes it uses:- EscapeData,- EscapeBytes,- EscapeText,- EscapeString, and- EscapeUnicodewill be removed.
- The - escapefilter will change to use- django.utils.html.conditional_escape().
- Manager.use_for_related_fieldswill be removed.
- Model - Managerinheritance will follow MRO inheritance rules and the- Meta.manager_inheritance_from_futureto opt-in to this behavior will be removed.
- Support for old-style middleware using - settings.MIDDLEWARE_CLASSESwill be removed.
1.10¶
See the Django 1.8 release notes for more details on these changes.
- Support for calling a - SQLCompilerdirectly as an alias for calling its- quote_name_unless_aliasmethod will be removed.
- cycleand- firstoftemplate tags will be removed from the- futuretemplate tag library (used during the 1.6/1.7 deprecation period).
- django.conf.urls.patterns()will be removed.
- Support for the - prefixargument to- django.conf.urls.i18n.i18n_patterns()will be removed.
- SimpleTestCase.urlswill be removed.
- Using an incorrect count of unpacked values in the - fortemplate tag will raise an exception rather than fail silently.
- The ability to reverse URLs using a dotted Python path will be removed. 
- The ability to use a dotted Python path for the - LOGIN_URLand- LOGIN_REDIRECT_URLsettings will be removed.
- Support for - optparsewill be dropped for custom management commands (replaced by- argparse).
- The class - django.core.management.NoArgsCommandwill be removed. Use- BaseCommandinstead, which takes no arguments by default.
- django.core.context_processorsmodule will be removed.
- django.db.models.sql.aggregatesmodule will be removed.
- django.contrib.gis.db.models.sql.aggregatesmodule will be removed.
- The following methods and properties of - django.db.sql.query.Querywill be removed:- Properties: - aggregatesand- aggregate_select
- Methods: - add_aggregate,- set_aggregate_mask, and- append_aggregate_mask.
 
- django.template.resolve_variablewill be removed.
- The following private APIs will be removed from - django.db.models.options.Options(- Model._meta):- get_field_by_name()
- get_all_field_names()
- get_fields_with_model()
- get_concrete_fields_with_model()
- get_m2m_with_model()
- get_all_related_objects()
- get_all_related_objects_with_model()
- get_all_related_many_to_many_objects()
- get_all_related_m2m_objects_with_model()
 
- The - error_messageargument of- django.forms.RegexFieldwill be removed.
- The - unordered_listfilter will no longer support old style lists.
- Support for string - viewarguments to- url()will be removed.
- The backward compatible shim to rename - django.forms.Form._has_changed()to- has_changed()will be removed.
- The - removetagstemplate filter will be removed.
- The - remove_tags()and- strip_entities()functions in- django.utils.htmlwill be removed.
- The - is_admin_siteargument to- django.contrib.auth.views.password_reset()will be removed.
- django.db.models.field.subclassing.SubfieldBasewill be removed.
- django.utils.checksumswill be removed; its functionality is included in- django-localflavor1.1+.
- The - original_content_type_idattribute on- django.contrib.admin.helpers.InlineAdminFormwill be removed.
- The backwards compatibility shim to allow - FormMixin.get_form()to be defined with no default value for its- form_classargument will be removed.
- The following settings will be removed: - ALLOWED_INCLUDE_ROOTS
- TEMPLATE_CONTEXT_PROCESSORS
- TEMPLATE_DEBUG
- TEMPLATE_DIRS
- TEMPLATE_LOADERS
- TEMPLATE_STRING_IF_INVALID
 
- The backwards compatibility alias - django.template.loader.BaseLoaderwill be removed.
- Django template objects returned by - get_template()and- select_template()won’t accept a- Contextin their- render()method anymore.
- Template response APIs will enforce the use of - dictand backend-dependent template objects instead of- Contextand- Templaterespectively.
- The - current_appparameter for the following function and classes will be removed:- django.shortcuts.render()
- django.template.Context()
- django.template.RequestContext()
- django.template.response.TemplateResponse()
 
- The - dictionaryand- context_instanceparameters for the following functions will be removed:- django.shortcuts.render()
- django.shortcuts.render_to_response()
- django.template.loader.render_to_string()
 
- The - dirsparameter for the following functions will be removed:- django.template.loader.get_template()
- django.template.loader.select_template()
- django.shortcuts.render()
- django.shortcuts.render_to_response()
 
- Session verification will be enabled regardless of whether or not - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware'is in- MIDDLEWARE_CLASSES.
- Private attribute - django.db.models.Field.relatedwill be removed.
- The - --listoption of the- migratemanagement command will be removed.
- The - ssitemplate tag will be removed.
- Support for the - =comparison operator in the- iftemplate tag will be removed.
- The backwards compatibility shims to allow - Storage.get_available_name()and- Storage.save()to be defined without a- max_lengthargument will be removed.
- Support for the legacy - %(<foo>)ssyntax in- ModelFormMixin.success_urlwill be removed.
- GeoQuerySetaggregate methods- collect(),- extent(),- extent3d(),- make_line(), and- unionagg()will be removed.
- Ability to specify - ContentType.namewhen creating a content type instance will be removed.
- Support for the old signature of - allow_migratewill be removed. It changed from- allow_migrate(self, db, model)to- allow_migrate(self, db, app_label, model_name=None, **hints).
- Support for the syntax of - {% cycle %}that uses comma-separated arguments will be removed.
- The warning that - Signerissues when given an invalid separator will become an exception.
1.9¶
See the Django 1.7 release notes for more details on these changes.
- django.utils.dictconfigwill be removed.
- django.utils.importlibwill be removed.
- django.utils.tzinfowill be removed.
- django.utils.unittestwill be removed.
- The - syncdbcommand will be removed.
- django.db.models.signals.pre_syncdband- django.db.models.signals.post_syncdbwill be removed.
- allow_syncdbon database routers will no longer automatically become- allow_migrate.
- Automatic syncing of apps without migrations will be removed. Migrations will become compulsory for all apps unless you pass the - --run-syncdboption to- migrate.
- The SQL management commands for apps without migrations, - sql,- sqlall,- sqlclear,- sqldropindexes, and- sqlindexes, will be removed.
- Support for automatic loading of - initial_datafixtures and initial SQL data will be removed.
- All models will need to be defined inside an installed application or declare an explicit - app_label. Furthermore, it won’t be possible to import them before their application is loaded. In particular, it won’t be possible to import models inside the root package of their application.
- The model and form - IPAddressFieldwill be removed. A stub field will remain for compatibility with historical migrations.
- AppCommand.handle_app()will no longer be supported.
- RequestSiteand- get_current_site()will no longer be importable from- django.contrib.sites.models.
- FastCGI support via the - runfcgimanagement command will be removed. Please deploy your project using WSGI.
- django.utils.datastructures.SortedDictwill be removed. Use- collections.OrderedDictfrom the Python standard library instead.
- ModelAdmin.declared_fieldsetswill be removed.
- Instances of - util.pyin the Django codebase have been renamed to- utils.pyin an effort to unify all util and utils references. The modules that provided backwards compatibility will be removed:- django.contrib.admin.util
- django.contrib.gis.db.backends.util
- django.db.backends.util
- django.forms.util
 
- ModelAdmin.get_formsetswill be removed.
- The backward compatibility shim introduced to rename the - BaseMemcachedCache._get_memcache_timeout()method to- get_backend_timeout()will be removed.
- The - --naturaland- -noptions for- dumpdatawill be removed.
- The - use_natural_keysargument for- serializers.serialize()will be removed.
- Private API - django.forms.forms.get_declared_fields()will be removed.
- The ability to use a - SplitDateTimeWidgetwith- DateTimeFieldwill be removed.
- The - WSGIRequest.REQUESTproperty will be removed.
- The class - django.utils.datastructures.MergeDictwill be removed.
- The - zh-cnand- zh-twlanguage codes will be removed and have been replaced by the- zh-hansand- zh-hantlanguage code respectively.
- The internal - django.utils.functional.memoizewill be removed.
- django.core.cache.get_cachewill be removed. Add suitable entries to- CACHESand use- django.core.cache.cachesinstead.
- django.db.models.loadingwill be removed.
- Passing callable arguments to querysets will no longer be possible. 
- BaseCommand.requires_model_validationwill be removed in favor of- requires_system_checks. Admin validators will be replaced by admin checks.
- The - ModelAdmin.validator_classand- default_validator_classattributes will be removed.
- ModelAdmin.validate()will be removed.
- django.db.backends.DatabaseValidation.validate_fieldwill be removed in favor of the- check_fieldmethod.
- The - validatemanagement command will be removed.
- django.utils.module_loading.import_by_pathwill be removed in favor of- django.utils.module_loading.import_string.
- ssiand- urltemplate tags will be removed from the- futuretemplate tag library (used during the 1.3/1.4 deprecation period).
- django.utils.text.javascript_quotewill be removed.
- Database test settings as independent entries in the database settings, prefixed by - TEST_, will no longer be supported.
- The - cache_choicesoption to- ModelChoiceFieldand- ModelMultipleChoiceFieldwill be removed.
- The default value of the - RedirectView.permanentattribute will change from- Trueto- False.
- django.contrib.sitemaps.FlatPageSitemapwill be removed in favor of- django.contrib.flatpages.sitemaps.FlatPageSitemap.
- Private API - django.test.utils.TestTemplateLoaderwill be removed.
- The - django.contrib.contenttypes.genericmodule will be removed.
- Private APIs - django.db.models.sql.where.WhereNode.make_atom()and- django.db.models.sql.where.Constraintwill be removed.
1.8¶
See the Django 1.6 release notes for more details on these changes.
- django.contrib.commentswill be removed.
- The following transaction management APIs will be removed: - TransactionMiddleware,
- the decorators and context managers - autocommit,- commit_on_success, and- commit_manually, defined in- django.db.transaction,
- the functions - commit_unless_managedand- rollback_unless_managed, also defined in- django.db.transaction,
- the - TRANSACTIONS_MANAGEDsetting.
 
- The - cycleand- firstoftemplate tags will auto-escape their arguments. In 1.6 and 1.7, this behavior is provided by the version of these tags in the- futuretemplate tag library.
- The - SEND_BROKEN_LINK_EMAILSsetting will be removed. Add the- django.middleware.common.BrokenLinkEmailsMiddlewaremiddleware to your- MIDDLEWARE_CLASSESsetting instead.
- django.middleware.doc.XViewMiddlewarewill be removed. Use- django.contrib.admindocs.middleware.XViewMiddlewareinstead.
- Model._meta.module_namewas renamed to- model_name.
- Remove the backward compatible shims introduced to rename - get_query_setand similar queryset methods. This affects the following classes:- BaseModelAdmin,- ChangeList,- BaseCommentNode,- GenericForeignKey,- Manager,- SingleRelatedObjectDescriptorand- ReverseSingleRelatedObjectDescriptor.
- Remove the backward compatible shims introduced to rename the attributes - ChangeList.root_query_setand- ChangeList.query_set.
- django.views.defaults.shortcutwill be removed, as part of the goal of removing all- django.contribreferences from the core Django codebase. Instead use- django.contrib.contenttypes.views.shortcut.- django.conf.urls.shortcutwill also be removed.
- Support for the Python Imaging Library (PIL) module will be removed, as it no longer appears to be actively maintained & does not work on Python 3. 
- The following private APIs will be removed: - django.db.backend
- django.db.close_connection()
- django.db.backends.creation.BaseDatabaseCreation.set_autocommit()
- django.db.transaction.is_managed()
- django.db.transaction.managed()
 
- django.forms.widgets.RadioInputwill be removed in favor of- django.forms.widgets.RadioChoiceInput.
- The module - django.test.simpleand the class- django.test.simple.DjangoTestSuiteRunnerwill be removed. Instead use- django.test.runner.DiscoverRunner.
- The module - django.test._doctestwill be removed. Instead use the doctest module from the Python standard library.
- The - CACHE_MIDDLEWARE_ANONYMOUS_ONLYsetting will be removed.
- Usage of the hardcoded Hold down “Control”, or “Command” on a Mac, to select more than one. string to override or append to user-provided - help_textin forms for ManyToMany model fields will not be performed by Django anymore either at the model or forms layer.
- The - Model._meta.get_(add|change|delete)_permissionmethods will be removed.
- The session key - django_languagewill no longer be read for backwards compatibility.
- Geographic Sitemaps will be removed ( - django.contrib.gis.sitemaps.views.indexand- django.contrib.gis.sitemaps.views.sitemap).
- django.utils.html.fix_ampersands, the- fix_ampersandstemplate filter and- django.utils.html.clean_htmlwill be removed following an accelerated deprecation.
1.7¶
See the Django 1.5 release notes for more details on these changes.
- The module - django.utils.simplejsonwill be removed. The standard library provides- jsonwhich should be used instead.
- The function - django.utils.itercompat.productwill be removed. The Python builtin version should be used instead.
- Auto-correction of INSTALLED_APPS and TEMPLATE_DIRS settings when they are specified as a plain string instead of a tuple will be removed and raise an exception. 
- The - mimetypeargument to the- __init__methods of- HttpResponse,- SimpleTemplateResponse, and- TemplateResponse, will be removed.- content_typeshould be used instead. This also applies to the- render_to_response()shortcut and the sitemap views,- index()and- sitemap().
- When - HttpResponseis instantiated with an iterator, or when- contentis set to an iterator, that iterator will be immediately consumed.
- The - AUTH_PROFILE_MODULEsetting, and the- get_profile()method on the User model, will be removed.
- The - cleanupmanagement command will be removed. It’s replaced by- clearsessions.
- The - daily_cleanup.pyscript will be removed.
- The - depthkeyword argument will be removed from- select_related().
- The undocumented - get_warnings_state()/- restore_warnings_state()functions from- django.test.utilsand the- save_warnings_state()/- restore_warnings_state()django.test.*TestCase methods are deprecated. Use the- warnings.catch_warningscontext manager available starting with Python 2.6 instead.
- The undocumented - check_for_test_cookiemethod in- AuthenticationFormwill be removed following an accelerated deprecation. Users subclassing this form should remove calls to this method, and instead ensure that their auth related views are CSRF protected, which ensures that cookies are enabled.
- The version of - django.contrib.auth.views.password_reset_confirm()that supports base36 encoded user IDs (- django.contrib.auth.views.password_reset_confirm_uidb36) will be removed. If your site has been running Django 1.6 for more than- PASSWORD_RESET_TIMEOUT_DAYS, this change will have no effect. If not, then any password reset links generated before you upgrade to Django 1.7 won’t work after the upgrade.
- The - django.utils.encoding.StrAndUnicodemix-in will be removed.
1.6¶
See the Django 1.4 release notes for more details on these changes.
- django.contrib.databrowsewill be removed.
- django.contrib.localflavorwill be removed following an accelerated deprecation.
- django.contrib.markupwill be removed following an accelerated deprecation.
- The compatibility modules - django.utils.copycompatand- django.utils.hashcompatas well as the functions- django.utils.itercompat.alland- django.utils.itercompat.anywill be removed. The Python builtin versions should be used instead.
- The - csrf_response_exemptand- csrf_view_exemptdecorators will be removed. Since 1.4- csrf_response_exempthas been a no-op (it returns the same function), and- csrf_view_exempthas been a synonym for- django.views.decorators.csrf.csrf_exempt, which should be used to replace it.
- The - django.core.cache.backends.memcached.CacheClassbackend was split into two in Django 1.3 in order to introduce support for PyLibMC. The historical- CacheClasswill be removed in favor of- django.core.cache.backends.memcached.MemcachedCache.
- The UK-prefixed objects of - django.contrib.localflavor.ukwill only be accessible through their GB-prefixed names (GB is the correct ISO 3166 code for United Kingdom).
- The - IGNORABLE_404_STARTSand- IGNORABLE_404_ENDSsettings have been superseded by- IGNORABLE_404_URLSin the 1.4 release. They will be removed.
- The form wizard has been refactored to use class-based views with pluggable backends in 1.4. The previous implementation will be removed. 
- Legacy ways of calling - cache_page()will be removed.
- The backward-compatibility shim to automatically add a debug-false filter to the - 'mail_admins'logging handler will be removed. The- LOGGINGsetting should include this filter explicitly if it is desired.
- The builtin truncation functions - django.utils.text.truncate_words()and- django.utils.text.truncate_html_words()will be removed in favor of the- django.utils.text.Truncatorclass.
- The - django.contrib.gis.geoip.GeoIPclass was moved to- django.contrib.gis.geoipin 1.4 – the shortcut in- django.contrib.gis.utilswill be removed.
- django.conf.urls.defaultswill be removed. The functions- include(),- patterns(), and- url(), plus- handler404and- handler500are now available through- django.conf.urls.
- The functions - setup_environ()and- execute_manager()will be removed from- django.core.management. This also means that the old (pre-1.4) style of- manage.pyfile will no longer work.
- Setting the - is_safeand- needs_autoescapeflags as attributes of template filter functions will no longer be supported.
- The attribute - HttpRequest.raw_post_datawas renamed to- HttpRequest.bodyin 1.4. The backward compatibility will be removed –- HttpRequest.raw_post_datawill no longer work.
- The value for the - post_url_continueparameter in- ModelAdmin.response_add()will have to be either- None(to redirect to the newly created object’s edit page) or a pre-formatted url. String formats, such as the previous default- '../%s/', will not be accepted any more.
1.5¶
See the Django 1.3 release notes for more details on these changes.
- Starting Django without a - SECRET_KEYwill result in an exception rather than a- DeprecationWarning. (This is accelerated from the usual deprecation path; see the Django 1.4 release notes.)
- The - mod_pythonrequest handler will be removed. The- mod_wsgihandler should be used instead.
- The - templateattribute on- django.test.client.Responseobjects returned by the test client will be removed. The- templatesattribute should be used instead.
- The - django.test.simple.DjangoTestRunnerwill be removed. Instead use a- unittest-native class. The features of the- django.test.simple.DjangoTestRunner(including fail-fast and Ctrl-C test termination) can be provided by- unittest.TextTestRunner.
- The undocumented function - django.contrib.formtools.utils.security_hashwill be removed, instead use- django.contrib.formtools.utils.form_hmac
- The function-based generic view modules will be removed in favor of their class-based equivalents, outlined here. 
- The - django.core.servers.basehttp.AdminMediaHandlerwill be removed. In its place use- django.contrib.staticfiles.handlers.StaticFilesHandler.
- The template tags library - adminmediaand the template tag- {% admin_media_prefix %}will be removed in favor of the generic static files handling. (This is faster than the usual deprecation path; see the Django 1.4 release notes.)
- The - urland- ssitemplate tags will be modified so that the first argument to each tag is a template variable, not an implied string. In 1.4, this behavior is provided by a version of the tag in the- futuretemplate tag library.
- The - resetand- sqlresetmanagement commands will be removed.
- Authentication backends will need to support an inactive user being passed to all methods dealing with permissions. The - supports_inactive_userattribute will no longer be checked and can be removed from custom backends.
- transform()will raise a- GEOSExceptionwhen called on a geometry with no SRID value.
- django.http.CompatCookiewill be removed in favor of- django.http.SimpleCookie.
- django.core.context_processors.PermWrapperand- django.core.context_processors.PermLookupDictwill be removed in favor of the corresponding- django.contrib.auth.context_processors.PermWrapperand- django.contrib.auth.context_processors.PermLookupDict, respectively.
- The - MEDIA_URLor- STATIC_URLsettings will be required to end with a trailing slash to ensure there is a consistent way to combine paths in templates.
- django.db.models.fields.URLField.verify_existswill be removed. The feature was deprecated in 1.3.1 due to intractable security and performance issues and will follow a slightly accelerated deprecation timeframe.
- Translations located under the so-called project path will be ignored during the translation building process performed at runtime. The - LOCALE_PATHSsetting can be used for the same task by including the filesystem path to a- localedirectory containing non-app-specific translations in its value.
- The Markup contrib app will no longer support versions of Python-Markdown library earlier than 2.1. An accelerated timeline was used as this was a security related deprecation. 
- The - CACHE_BACKENDsetting will be removed. The cache backend(s) should be specified in the- CACHESsetting.
1.4¶
See the Django 1.2 release notes for more details on these changes.
- CsrfResponseMiddlewareand- CsrfMiddlewarewill be removed. Use the- {% csrf_token %}template tag inside forms to enable CSRF protection.- CsrfViewMiddlewareremains and is enabled by default.
- The old imports for CSRF functionality ( - django.contrib.csrf.*), which moved to core in 1.2, will be removed.
- The - django.contrib.gis.db.backendmodule will be removed in favor of the specific backends.
- SMTPConnectionwill be removed in favor of a generic email backend API.
- The many to many SQL generation functions on the database backends will be removed. 
- The ability to use the - DATABASE_*family of top-level settings to define database connections will be removed.
- The ability to use shorthand notation to specify a database backend (i.e., - sqlite3instead of- django.db.backends.sqlite3) will be removed.
- The - get_db_prep_save,- get_db_prep_valueand- get_db_prep_lookupmethods will have to support multiple databases.
- The - Messagemodel (in- django.contrib.auth), its related manager in the- Usermodel (- user.message_set), and the associated methods (- user.message_set.create()and- user.get_and_delete_messages()), will be removed. The messages framework should be used instead. The related- messagesvariable returned by the auth context processor will also be removed. Note that this means that the admin application will depend on the messages context processor.
- Authentication backends will need to support the - objparameter for permission checking. The- supports_object_permissionsattribute will no longer be checked and can be removed from custom backends.
- Authentication backends will need to support the - AnonymousUserclass being passed to all methods dealing with permissions. The- supports_anonymous_uservariable will no longer be checked and can be removed from custom backends.
- The ability to specify a callable template loader rather than a - Loaderclass will be removed, as will the- load_template_sourcefunctions that are included with the built in template loaders for backwards compatibility.
- django.utils.translation.get_date_formats()and- django.utils.translation.get_partial_date_formats(). These functions will be removed; use the locale-aware- django.utils.formats.get_format()to get the appropriate formats.
- In - django.forms.fields, the constants:- DEFAULT_DATE_INPUT_FORMATS,- DEFAULT_TIME_INPUT_FORMATSand- DEFAULT_DATETIME_INPUT_FORMATSwill be removed. Use- django.utils.formats.get_format()to get the appropriate formats.
- The ability to use a function-based test runner will be removed, along with the - django.test.simple.run_tests()test runner.
- The - views.feed()view and- feeds.Feedclass in- django.contrib.syndicationwill be removed. The class-based view- views.Feedshould be used instead.
- django.core.context_processors.auth. This release will remove the old method in favor of the new method in- django.contrib.auth.context_processors.auth.
- The - postgresqldatabase backend will be removed, use the- postgresql_psycopg2backend instead.
- The - nolanguage code will be removed and has been replaced by the- nblanguage code.
- Authentication backends will need to define the boolean attribute - supports_inactive_useruntil version 1.5 when it will be assumed that all backends will handle inactive users.
- django.db.models.fields.XMLFieldwill be removed. This was deprecated as part of the 1.3 release. An accelerated deprecation schedule has been used because the field hasn’t performed any role beyond that of a simple- TextFieldsince the removal of- oldforms. All uses of- XMLFieldcan be replaced with- TextField.
- The undocumented - mixinparameter to the- open()method of- django.core.files.storage.Storage(and subclasses) will be removed.
1.3¶
See the Django 1.1 release notes for more details on these changes.
- AdminSite.root(). This method of hooking up the admin URLs will be removed in favor of including- admin.site.urls.
- Authentication backends need to define the boolean attributes - supports_object_permissionsand- supports_anonymous_useruntil version 1.4, at which point it will be assumed that all backends will support these options.