2018-12-28 08:03:30 +08: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`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-03-25 15:39:11 +08:00
|
|
|
* Added support for the ``admin_order_field`` attribute on properties in
|
2019-03-19 23:51:35 +08:00
|
|
|
:attr:`.ModelAdmin.list_display`.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-03-19 23:13:26 +08:00
|
|
|
* The new :meth:`ModelAdmin.get_inlines()
|
|
|
|
<django.contrib.admin.ModelAdmin.get_inlines>` method allows specifying the
|
|
|
|
inlines based on the request or model instance.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
:mod:`django.contrib.admindocs`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.auth`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-05-23 20:18:49 +08:00
|
|
|
* The new ``reset_url_token`` attribute in
|
|
|
|
:class:`~django.contrib.auth.views.PasswordResetConfirmView` allows specifying
|
|
|
|
a token parameter displayed as a component of password reset URLs.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
|
|
|
:mod:`django.contrib.contenttypes`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.gis`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-01-19 22:28:42 +08:00
|
|
|
* Allowed MySQL spatial lookup functions to operate on real geometries.
|
|
|
|
Previous support was limited to bounding boxes.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-03-21 00:54:42 +08:00
|
|
|
* Added the :class:`~django.contrib.gis.db.models.functions.GeometryDistance`
|
|
|
|
function, supported on PostGIS.
|
|
|
|
|
2019-04-09 02:17:05 +08:00
|
|
|
* Added support for the ``furlong`` unit in
|
|
|
|
:class:`~django.contrib.gis.measure.Distance`.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
:mod:`django.contrib.messages`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.postgres`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.redirects`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sessions`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-05-20 04:15:45 +08:00
|
|
|
* The new
|
|
|
|
:meth:`~django.contrib.sessions.backends.base.SessionBase.get_session_cookie_age()`
|
|
|
|
methods allows dynamically specifying the session cookie age.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
|
|
|
:mod:`django.contrib.sitemaps`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.sites`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.staticfiles`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
:mod:`django.contrib.syndication`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-04-11 05:48:58 +08:00
|
|
|
* Added the ``language`` class attribute to the
|
|
|
|
:class:`django.contrib.syndication.views.Feed` to customize a feed language.
|
|
|
|
The default value is :func:`~django.utils.translation.get_language()` instead
|
2019-05-21 14:21:35 +08:00
|
|
|
of :setting:`LANGUAGE_CODE`.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
|
|
|
Cache
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
CSRF
|
|
|
|
~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Email
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
File Storage
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
File Uploads
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
|
|
|
|
Forms
|
|
|
|
~~~~~
|
|
|
|
|
2018-11-22 04:58:04 +08:00
|
|
|
* Formsets may control the widget used when ordering forms via
|
|
|
|
:attr:`~django.forms.formsets.BaseFormSet.can_order` by setting the
|
|
|
|
:attr:`~django.forms.formsets.BaseFormSet.ordering_widget` attribute or
|
|
|
|
overriding :attr:`~django.forms.formsets.BaseFormSet.get_ordering_widget()`.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
|
|
|
Generic Views
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Internationalization
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-04-01 17:29:10 +08:00
|
|
|
* Added the :setting:`LANGUAGE_COOKIE_HTTPONLY`,
|
|
|
|
:setting:`LANGUAGE_COOKIE_SAMESITE`, and :setting:`LANGUAGE_COOKIE_SECURE`
|
|
|
|
settings to set the ``HttpOnly``, ``SameSite``, and ``Secure`` flags on
|
|
|
|
language cookies. The default values of these settings preserve the previous
|
|
|
|
behavior.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
|
|
|
Management Commands
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-01-28 03:35:17 +08:00
|
|
|
* The new :option:`compilemessages --ignore` option allows ignoring specific
|
|
|
|
directories when searching for ``.po`` files to compile.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-03-08 00:52:10 +08:00
|
|
|
* :option:`showmigrations --list` now shows the applied datetimes when
|
|
|
|
``--verbosity`` is 2 and above.
|
|
|
|
|
2019-04-16 17:40:22 +08:00
|
|
|
* On PostgreSQL, :djadmin:`dbshell` now supports client-side TLS certificates.
|
|
|
|
|
2019-04-25 21:45:00 +08:00
|
|
|
* :djadmin:`inspectdb` now introspects :class:`~django.db.models.OneToOneField`
|
|
|
|
when a foreign key has a unique or primary key constraint.
|
|
|
|
|
2019-04-27 07:37:57 +08:00
|
|
|
* The new :option:`--skip-checks` option skips running system checks prior to
|
|
|
|
running the command.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
Migrations
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Models
|
|
|
|
~~~~~~
|
|
|
|
|
2019-03-21 02:30:43 +08:00
|
|
|
* Added hash database functions :class:`~django.db.models.functions.MD5`,
|
|
|
|
:class:`~django.db.models.functions.SHA1`,
|
|
|
|
:class:`~django.db.models.functions.SHA224`,
|
|
|
|
:class:`~django.db.models.functions.SHA256`,
|
|
|
|
:class:`~django.db.models.functions.SHA384`, and
|
|
|
|
:class:`~django.db.models.functions.SHA512`.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-03-20 16:27:34 +08:00
|
|
|
* Added the :class:`~django.db.models.functions.Sign` database function.
|
|
|
|
|
2019-03-07 23:02:18 +08:00
|
|
|
* The new ``is_dst`` parameter of the
|
|
|
|
:class:`~django.db.models.functions.Trunc` database functions determines the
|
|
|
|
treatment of nonexistent and ambiguous datetimes.
|
|
|
|
|
2019-04-26 00:09:27 +08:00
|
|
|
* ``connection.queries`` now shows ``COPY … TO`` statements on PostgreSQL.
|
|
|
|
|
2019-05-02 16:42:10 +08:00
|
|
|
* :class:`~django.db.models.FilePathField` now accepts a callable ``path``.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
Requests and Responses
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2019-03-27 12:40:10 +08:00
|
|
|
* Allowed :class:`~django.http.HttpResponse` to be initialized with
|
|
|
|
:class:`memoryview` content.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-05-09 22:26:52 +08:00
|
|
|
* For use in, for example, Django templates, :attr:`.HttpRequest.headers` now
|
|
|
|
allows look ups using underscores (e.g. ``user_agent``) in place of hyphens.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
Serialization
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Signals
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Templates
|
|
|
|
~~~~~~~~~
|
|
|
|
|
|
|
|
* ...
|
|
|
|
|
|
|
|
Tests
|
|
|
|
~~~~~
|
|
|
|
|
2019-02-20 19:16:10 +08:00
|
|
|
* The new test :class:`~django.test.Client` argument
|
|
|
|
``raise_request_exception`` allows controlling whether or not exceptions
|
|
|
|
raised during the request should also be raised in the test. The value
|
|
|
|
defaults to ``True`` for backwards compatibility. If it is ``False`` and an
|
|
|
|
exception occurs, the test client will return a 500 response with the
|
|
|
|
attribute :attr:`~django.test.Response.exc_info`, a tuple providing
|
|
|
|
information of the exception that occurred.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-03-08 04:58:30 +08:00
|
|
|
* Tests and test cases to run can be selected by test name pattern using the
|
|
|
|
new :option:`test -k` option.
|
|
|
|
|
2019-05-09 21:55:32 +08:00
|
|
|
* HTML comparison, as used by
|
|
|
|
:meth:`~django.test.SimpleTestCase.assertHTMLEqual`, now treats text, character
|
|
|
|
references, and entity references that refer to the same character as
|
|
|
|
equivalent.
|
|
|
|
|
2019-02-27 00:23:49 +08:00
|
|
|
* Django test runner now supports headless mode for selenium tests on supported
|
|
|
|
browsers. Add the ``--headless`` option to enable this mode.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
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 22:00:24 +08:00
|
|
|
* The second argument of ``DatabaseIntrospection.get_geometry_type()`` is now
|
|
|
|
the row description instead of the column name.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2019-01-19 21:35:51 +08:00
|
|
|
* ``DatabaseIntrospection.get_field_type()`` may no longer return tuples.
|
|
|
|
|
2019-01-19 12:17:26 +08: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-31 04:31:56 +08: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-05 01:03:12 +08:00
|
|
|
:mod:`django.contrib.gis`
|
|
|
|
-------------------------
|
|
|
|
|
2019-02-11 00:45:03 +08:00
|
|
|
* Support for PostGIS 2.1 is removed.
|
2019-02-05 00:07:46 +08:00
|
|
|
|
2019-02-05 01:03:12 +08:00
|
|
|
* Support for SpatiaLite 4.1 and 4.2 is removed.
|
|
|
|
|
2019-02-09 21:40:55 +08:00
|
|
|
* Support for GDAL 1.11 and GEOS 3.4 is removed.
|
2019-02-08 08:10:34 +08:00
|
|
|
|
2019-02-05 00:07:46 +08: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-07 02:25:04 +08:00
|
|
|
Dropped support for Oracle 12.1
|
|
|
|
-------------------------------
|
|
|
|
|
|
|
|
Upstream support for Oracle 12.1 ends in July 2021. Django 2.2 will be
|
|
|
|
supported until April 2022. Django 3.0 officially supports Oracle 12.2 and 18c.
|
|
|
|
|
2019-02-05 03:00:00 +08: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 08:40:07 +08:00
|
|
|
* ``django.utils.lru_cache.lru_cache()`` - Alias of
|
|
|
|
:func:`functools.lru_cache`.
|
|
|
|
|
2019-02-05 08:44:54 +08:00
|
|
|
* ``django.utils.decorators.available_attrs()`` - This function returns
|
|
|
|
``functools.WRAPPER_ASSIGNMENTS``.
|
|
|
|
|
2019-02-05 09:14:46 +08:00
|
|
|
* ``django.utils.decorators.ContextDecorator`` - Alias of
|
|
|
|
:class:`contextlib.ContextDecorator`.
|
|
|
|
|
2019-02-05 08:50:30 +08:00
|
|
|
* ``django.utils._os.abspathu()`` - Alias of :func:`os.path.abspath`.
|
|
|
|
|
|
|
|
* ``django.utils._os.upath()`` and ``npath()`` - These functions do nothing on
|
|
|
|
Python 3.
|
|
|
|
|
2019-02-05 08:53:27 +08:00
|
|
|
* ``django.utils.six`` - Remove usage of this vendored library or switch to
|
|
|
|
`six <https://pypi.org/project/six/>`_.
|
|
|
|
|
|
|
|
* ``django.utils.encoding.python_2_unicode_compatible()`` - Alias of
|
|
|
|
``six.python_2_unicode_compatible()``.
|
|
|
|
|
2019-02-05 09:22:44 +08:00
|
|
|
* ``django.utils.functional.curry()`` - Use :func:`functools.partial` or
|
|
|
|
:class:`functools.partialmethod`. See :commit:`5b1c389603a353625ae1603`.
|
|
|
|
|
2019-02-05 21:19:49 +08:00
|
|
|
* ``django.utils.safestring.SafeBytes`` - Unused since Django 2.0.
|
|
|
|
|
2019-02-06 21:57:37 +08:00
|
|
|
New default value for the ``FILE_UPLOAD_PERMISSIONS`` setting
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
|
|
|
In older versions, the :setting:`FILE_UPLOAD_PERMISSIONS` setting defaults to
|
|
|
|
``None``. With the default :setting:`FILE_UPLOAD_HANDLERS`, this results in
|
|
|
|
uploaded files having different permissions depending on their size and which
|
|
|
|
upload handler is used.
|
|
|
|
|
|
|
|
``FILE_UPLOAD_PERMISSION`` now defaults to ``0o644`` to avoid this
|
|
|
|
inconsistency.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
Miscellaneous
|
|
|
|
-------------
|
|
|
|
|
2018-12-21 15:24:04 +08:00
|
|
|
* ``ContentType.__str__()`` now includes the model's ``app_label`` to
|
|
|
|
disambiguate model's with the same name in different apps.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2016-08-15 04:42:49 +08:00
|
|
|
* Because accessing the language in the session rather than in the cookie is
|
|
|
|
deprecated, ``LocaleMiddleware`` no longer looks for the user's language in
|
|
|
|
the session and :func:`django.contrib.auth.logout` no longer preserves the
|
|
|
|
session's language after logout.
|
|
|
|
|
2019-04-24 19:30:34 +08:00
|
|
|
* :func:`django.utils.html.escape` now uses :func:`html.escape` to escape HTML.
|
|
|
|
This converts ``'`` to ``'`` instead of the previous equivalent decimal
|
|
|
|
code ``'``.
|
|
|
|
|
2019-03-08 04:58:30 +08:00
|
|
|
* The ``django-admin test -k`` option now works as the :option:`unittest
|
|
|
|
-k<unittest.-k>` option rather than as a shortcut for ``--keepdb``.
|
|
|
|
|
2019-04-30 04:51:05 +08:00
|
|
|
* Support for ``pywatchman`` < 1.2.0 is removed.
|
|
|
|
|
2019-05-05 07:26:37 +08:00
|
|
|
* HTML rendered by :class:`~django.forms.SelectDateWidget` for required fields
|
|
|
|
now have the ``placeholder`` attribute, which mainly may require some
|
|
|
|
adjustments in tests that compare HTML.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
.. _deprecated-features-3.0:
|
|
|
|
|
|
|
|
Features deprecated in 3.0
|
|
|
|
==========================
|
|
|
|
|
2019-02-05 22:19:49 +08:00
|
|
|
``django.utils.encoding.force_text()`` and ``smart_text()``
|
|
|
|
-----------------------------------------------------------
|
|
|
|
|
|
|
|
The ``smart_text()`` and ``force_text()`` aliases (since Django 2.0) of
|
|
|
|
``smart_str()`` and ``force_str()`` are deprecated. Ignore this deprecation if
|
|
|
|
your code supports Python 2 as the behavior of ``smart_str()`` and
|
|
|
|
``force_str()`` is different there.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
Miscellaneous
|
|
|
|
-------------
|
|
|
|
|
2019-02-05 07:53:11 +08: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`.
|
|
|
|
|
2019-02-06 11:45:26 +08:00
|
|
|
* ``django.utils.translation.ugettext()``, ``ugettext_lazy()``,
|
|
|
|
``ugettext_noop()``, ``ungettext()``, and ``ungettext_lazy()`` are deprecated
|
|
|
|
in favor of the functions that they're aliases for:
|
|
|
|
:func:`django.utils.translation.gettext`,
|
|
|
|
:func:`~django.utils.translation.gettext_lazy`,
|
|
|
|
:func:`~django.utils.translation.gettext_noop`,
|
|
|
|
:func:`~django.utils.translation.ngettext`, and
|
|
|
|
:func:`~django.utils.translation.ngettext_lazy`.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2016-08-15 04:42:49 +08:00
|
|
|
* To limit creation of sessions and hence favor some caching strategies,
|
|
|
|
:func:`django.views.i18n.set_language` will stop setting the user's language
|
|
|
|
in the session in Django 4.0. Since Django 2.1, the language is always stored
|
|
|
|
in the :setting:`LANGUAGE_COOKIE_NAME` cookie.
|
|
|
|
|
2019-03-19 13:05:47 +08:00
|
|
|
* ``alias=None`` is added to the signature of
|
|
|
|
:meth:`.Expression.get_group_by_cols`.
|
|
|
|
|
2019-04-24 21:10:28 +08:00
|
|
|
* ``django.utils.text.unescape_entities()`` is deprecated in favor of
|
|
|
|
:func:`html.unescape`. Note that unlike ``unescape_entities()``,
|
|
|
|
``html.unescape()`` evaluates lazy strings immediately.
|
|
|
|
|
2018-12-28 08:03:30 +08: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 08:23:09 +08:00
|
|
|
* The ``django.db.backends.postgresql_psycopg2`` module is removed.
|
2018-12-28 08:03:30 +08:00
|
|
|
|
2018-12-28 08:23:09 +08:00
|
|
|
* ``django.shortcuts.render_to_response()`` is removed.
|
|
|
|
|
2018-12-28 08:49:03 +08:00
|
|
|
* The ``DEFAULT_CONTENT_TYPE`` setting is removed.
|
|
|
|
|
2018-12-28 08:58:22 +08:00
|
|
|
* ``HttpRequest.xreadlines()`` is removed.
|
|
|
|
|
2018-12-28 08:58:22 +08:00
|
|
|
* Support for the ``context`` argument of ``Field.from_db_value()`` and
|
|
|
|
``Expression.convert_value()`` is removed.
|
|
|
|
|
2019-03-07 18:10:17 +08:00
|
|
|
* The ``field_name`` keyword argument of ``QuerySet.earliest()`` and
|
2018-12-28 09:18:45 +08:00
|
|
|
``latest()`` is removed.
|
|
|
|
|
2018-12-28 08:03:30 +08:00
|
|
|
See :ref:`deprecated-features-2.1` for details on these changes, including how
|
|
|
|
to remove usage of these features.
|
|
|
|
|
2018-12-28 09:31:55 +08:00
|
|
|
* The ``ForceRHR`` GIS function is removed.
|
2018-12-28 09:35:20 +08:00
|
|
|
|
|
|
|
* ``django.utils.http.cookie_date()`` is removed.
|
2018-12-28 09:41:54 +08:00
|
|
|
|
|
|
|
* The ``staticfiles`` and ``admin_static`` template tag libraries are removed.
|
|
|
|
|
|
|
|
* ``django.contrib.staticfiles.templatetags.staticfiles.static()`` is removed.
|