==========================
Django 2.2.1 release notes
==========================

*May 1, 2019*

Django 2.2.1 fixes several bugs in 2.2.

Bugfixes
========

* Fixed a regression in Django 2.1 that caused the incorrect quoting of
  database user password when using :djadmin:`dbshell` on Oracle
  (:ticket:`30307`).

* Added compatibility for ``psycopg2`` 2.8 (:ticket:`30331`).

* Fixed a regression in Django 2.2 that caused a crash when loading the
  template for the technical 500 debug page (:ticket:`30324`).

* Fixed crash of ``ordering`` argument in
  :class:`~django.contrib.postgres.aggregates.ArrayAgg` and
  :class:`~django.contrib.postgres.aggregates.StringAgg` when it contains an
  expression with params (:ticket:`30332`).

* Fixed a regression in Django 2.2 that caused a single instance fast-delete
  to not set the primary key to ``None`` (:ticket:`30330`).

* Prevented :djadmin:`makemigrations` from generating infinite migrations for
  check constraints and partial indexes when ``condition`` contains
  a :class:`~python:range` object (:ticket:`30350`).

* Reverted an optimization in Django 2.2 (:ticket:`29725`) that caused the
  inconsistent behavior of ``count()`` and ``exists()`` on a reverse
  many-to-many relationship with a custom manager (:ticket:`30325`).

* Fixed a regression in Django 2.2 where
  :class:`~django.core.paginator.Paginator` crashes if ``object_list`` is
  a queryset ordered or aggregated over a nested ``JSONField`` key transform
  (:ticket:`30335`).

* Fixed a regression in Django 2.2 where ``IntegerField`` validation of
  database limits crashes if ``limit_value`` attribute in a custom validator is
  callable (:ticket:`30328`).

* Fixed a regression in Django 2.2 where
  :class:`~django.contrib.postgres.search.SearchVector` generates SQL that is
  not indexable (:ticket:`30385`).

* Fixed a regression in Django 2.2 that caused an exception to be raised when
  a custom error handler could not be imported (:ticket:`30318`).

* Relaxed the system check added in Django 2.2 for the admin app's dependencies
  to reallow use of
  :class:`~django.contrib.sessions.middleware.SessionMiddleware` subclasses,
  rather than requiring :mod:`django.contrib.sessions` to be in
  :setting:`INSTALLED_APPS` (:ticket:`30312`).

* Increased the default timeout when using ``Watchman`` to 5 seconds to prevent
  falling back to ``StatReloader`` on larger projects and made it customizable
  via the :envvar:`DJANGO_WATCHMAN_TIMEOUT` environment variable
  (:ticket:`30361`).

* Fixed a regression in Django 2.2 that caused a crash when migrating
  permissions for proxy models if the target permissions already existed. For
  example, when a permission had been created manually or a model had been
  migrated from concrete to proxy (:ticket:`30351`).

* Fixed a regression in Django 2.2 that caused a crash of :djadmin:`runserver`
  when URLConf modules raised exceptions (:ticket:`30323`).

* Fixed a regression in Django 2.2 where changes were not reliably detected by
  auto-reloader when using ``StatReloader`` (:ticket:`30323`).

* Fixed a migration crash on Oracle and PostgreSQL when adding a check
  constraint with a ``contains``, ``startswith``, or ``endswith`` lookup (or
  their case-insensitive variant) (:ticket:`30408`).

* Fixed a migration crash on Oracle and SQLite when adding a check constraint
  with ``condition`` contains ``|`` (``OR``) operator (:ticket:`30412`).
