2018-12-28 01:03:30 +01:00
|
|
|
============================================
|
|
|
|
Django 3.0 release notes - UNDER DEVELOPMENT
|
|
|
|
============================================
|
|
|
|
|
|
|
|
*Expected December 2019*
|
|
|
|
|
|
|
|
Welcome to Django 3.0!
|
|
|
|
|
|
|
|
These release notes cover the :ref:`new features <whats-new-3.0>`, as well as
|
|
|
|
some :ref:`backwards incompatible changes <backwards-incompatible-3.0>` you'll
|
|
|
|
want to be aware of when upgrading from Django 2.2 or earlier. We've
|
|
|
|
:ref:`dropped some features<removed-features-3.0>` that have reached the end of
|
|
|
|
their deprecation cycle, and we've :ref:`begun the deprecation process for
|
|
|
|
some features <deprecated-features-3.0>`.
|
|
|
|
|
|
|
|
See the :doc:`/howto/upgrade-version` guide if you're updating an existing
|
|
|
|
project.
|
|
|
|
|
|
|
|
Python compatibility
|
|
|
|
====================
|
|
|
|
|
|
|
|
Django 3.0 supports Python 3.6, 3.7, and 3.8. We **highly recommend** and only
|
|
|
|
officially support the latest release of each series.
|
|
|
|
|
|
|
|
The Django 2.2.x series is the last to support Python 3.5.
|
|
|
|
|
|
|
|
Third-party library support for older version of Django
|
|
|
|
=======================================================
|
|
|
|
|
|
|
|
Following the release of Django 3.0, we suggest that third-party app authors
|
|
|
|
drop support for all versions of Django prior to 2.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 3.0.
|
|
|
|
|
|
|
|
.. _whats-new-3.0:
|
|
|
|
|
|
|
|
What's new in Django 3.0
|
|
|
|
========================
|
|
|
|
|
|
|
|
Minor features
|
|
|
|
--------------
|
|
|
|
|
|
|
|
:mod:`django.contrib.admin`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.admindocs`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.auth`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.contenttypes`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.gis`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.messages`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.postgres`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.redirects`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sessions`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sitemaps`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sites`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.staticfiles`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.syndication`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Cache
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
CSRF
|
|
|
|
~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Email
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
File Storage
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
File Uploads
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
|
|
|
|
Forms
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Generic Views
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Internationalization
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Management Commands
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-01-27 20:35:17 +01:00
|
|
|
* The new :option:`compilemessages --ignore` option allows ignoring specific
|
|
|
|
directories when searching for ``.po`` files to compile.
|
2018-12-28 01:03:30 +01:00
|
|
|
|
|
|
|
Migrations
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Models
|
|
|
|
~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Requests and Responses
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Serialization
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Signals
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Templates
|
|
|
|
~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Tests
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
URLs
|
|
|
|
~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Validators
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
.. _backwards-incompatible-3.0:
|
|
|
|
|
|
|
|
Backwards incompatible changes in 3.0
|
|
|
|
=====================================
|
|
|
|
|
|
|
|
Database backend API
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
This section describes changes that may be needed in third-party database
|
|
|
|
backends.
|
|
|
|
|
2019-01-19 15:00:24 +01:00
|
|
|
* The second argument of ``DatabaseIntrospection.get_geometry_type()`` is now
|
|
|
|
the row description instead of the column name.
|
2018-12-28 01:03:30 +01:00
|
|
|
|
2019-01-19 14:35:51 +01:00
|
|
|
* ``DatabaseIntrospection.get_field_type()`` may no longer return tuples.
|
|
|
|
|
2019-01-19 05:17:26 +01:00
|
|
|
* If the database can create foreign keys in the same SQL statement that adds a
|
|
|
|
field, add ``SchemaEditor.sql_create_column_inline_fk`` with the appropriate
|
|
|
|
SQL; otherwise, set ``DatabaseFeatures.can_create_inline_fk = False``.
|
|
|
|
|
2019-01-30 21:31:56 +01:00
|
|
|
* ``DatabaseFeatures.can_return_id_from_insert`` and
|
|
|
|
``can_return_ids_from_bulk_insert`` are renamed to
|
|
|
|
``can_return_columns_from_insert`` and ``can_return_rows_from_bulk_insert``.
|
|
|
|
|
2019-02-04 18:03:12 +01:00
|
|
|
:mod:`django.contrib.gis`
|
|
|
|
-------------------------
|
|
|
|
|
2019-02-04 17:07:46 +01:00
|
|
|
* Supported for PostGIS 2.1 is removed.
|
|
|
|
|
2019-02-04 18:03:12 +01:00
|
|
|
* Support for SpatiaLite 4.1 and 4.2 is removed.
|
|
|
|
|
2019-02-04 17:07:46 +01:00
|
|
|
Dropped support for PostgreSQL 9.4
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
Upstream support for PostgreSQL 9.4 ends in December 2019. Django 3.0 supports
|
|
|
|
PostgreSQL 9.5 and higher.
|
|
|
|
|
2019-02-04 20:00:00 +01:00
|
|
|
Removed private Python 2 compatibility APIs
|
|
|
|
-------------------------------------------
|
|
|
|
|
|
|
|
While Python 2 support was removed in Django 2.0, some private APIs weren't
|
|
|
|
removed from Django so that third party apps could continue using them until
|
|
|
|
the Python 2 end-of-life.
|
|
|
|
|
|
|
|
Since we expect apps to drop Python 2 compatibility when adding support for
|
|
|
|
Django 3.0, we're removing these APIs at this time.
|
|
|
|
|
|
|
|
* ``django.test.utils.str_prefix()`` - Strings don't have 'u' prefixes in
|
|
|
|
Python 3.
|
|
|
|
|
|
|
|
* ``django.test.utils.patch_logger()`` - Use
|
|
|
|
:meth:`unittest.TestCase.assertLogs` instead.
|
|
|
|
|
2019-02-05 01:40:07 +01:00
|
|
|
* ``django.utils.lru_cache.lru_cache()`` - Alias of
|
|
|
|
:func:`functools.lru_cache`.
|
|
|
|
|
2019-02-05 01:44:54 +01:00
|
|
|
* ``django.utils.decorators.available_attrs()`` - This function returns
|
|
|
|
``functools.WRAPPER_ASSIGNMENTS``.
|
|
|
|
|
2019-02-05 01:50:30 +01:00
|
|
|
* ``django.utils._os.abspathu()`` - Alias of :func:`os.path.abspath`.
|
|
|
|
|
|
|
|
* ``django.utils._os.upath()`` and ``npath()`` - These functions do nothing on
|
|
|
|
Python 3.
|
|
|
|
|
2018-12-28 01:03:30 +01:00
|
|
|
Miscellaneous
|
|
|
|
-------------
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
.. _deprecated-features-3.0:
|
|
|
|
|
|
|
|
Features deprecated in 3.0
|
|
|
|
==========================
|
|
|
|
|
|
|
|
Miscellaneous
|
|
|
|
-------------
|
|
|
|
|
2019-02-05 00:53:11 +01:00
|
|
|
* ``django.utils.http.urlquote()``, ``urlquote_plus()``, ``urlunquote()``, and
|
|
|
|
``urlunquote_plus()`` are deprecated in favor of the functions that they're
|
|
|
|
aliases for: :func:`urllib.parse.quote`, :func:`~urllib.parse.quote_plus`,
|
|
|
|
:func:`~urllib.parse.unquote`, and :func:`~urllib.parse.unquote_plus`.
|
|
|
|
|
2018-12-28 01:03:30 +01:00
|
|
|
|
|
|
|
.. _removed-features-3.0:
|
|
|
|
|
|
|
|
Features removed in 3.0
|
|
|
|
=======================
|
|
|
|
|
|
|
|
These features have reached the end of their deprecation cycle and are removed
|
|
|
|
in Django 3.0.
|
|
|
|
|
|
|
|
See :ref:`deprecated-features-2.0` for details on these changes, including how
|
|
|
|
to remove usage of these features.
|
|
|
|
|
2018-12-28 01:23:09 +01:00
|
|
|
* The ``django.db.backends.postgresql_psycopg2`` module is removed.
|
2018-12-28 01:03:30 +01:00
|
|
|
|
2018-12-28 01:23:09 +01:00
|
|
|
* ``django.shortcuts.render_to_response()`` is removed.
|
|
|
|
|
2018-12-28 01:49:03 +01:00
|
|
|
* The ``DEFAULT_CONTENT_TYPE`` setting is removed.
|
|
|
|
|
2018-12-28 01:58:22 +01:00
|
|
|
* ``HttpRequest.xreadlines()`` is removed.
|
|
|
|
|
2018-12-28 01:58:22 +01:00
|
|
|
* Support for the ``context`` argument of ``Field.from_db_value()`` and
|
|
|
|
``Expression.convert_value()`` is removed.
|
|
|
|
|
2018-12-28 02:18:45 +01:00
|
|
|
* The ``field_name`` keyword argument of ``QuerySet.earliest()` and
|
|
|
|
``latest()`` is removed.
|
|
|
|
|
2018-12-28 01:03:30 +01:00
|
|
|
See :ref:`deprecated-features-2.1` for details on these changes, including how
|
|
|
|
to remove usage of these features.
|
|
|
|
|
2018-12-28 02:31:55 +01:00
|
|
|
* The ``ForceRHR`` GIS function is removed.
|
2018-12-28 02:35:20 +01:00
|
|
|
|
|
|
|
* ``django.utils.http.cookie_date()`` is removed.
|
2018-12-28 02:41:54 +01:00
|
|
|
|
|
|
|
* The ``staticfiles`` and ``admin_static`` template tag libraries are removed.
|
|
|
|
|
|
|
|
* ``django.contrib.staticfiles.templatetags.staticfiles.static()`` is removed.
|