==========================
Django 2.1.1 release notes
==========================

*August 31, 2018*

Django 2.1.1 fixes several bugs in 2.1.

Bugfixes
========

* Fixed a race condition in ``QuerySet.update_or_create()`` that could result
  in data loss (:ticket:`29499`).

* Fixed a regression where ``QueryDict.urlencode()`` crashed if the dictionary
  contains a non-string value (:ticket:`29627`).

* Fixed a regression in Django 2.0 where using ``manage.py test --keepdb``
  fails on PostgreSQL if the database exists and the user doesn't have
  permission to create databases (:ticket:`29613`).

* Fixed a regression in Django 2.0 where combining ``Q`` objects with ``__in``
  lookups and lists crashed (:ticket:`29643`).

* Fixed translation failure of ``DurationField``'s "overflow" error message
  (:ticket:`29623`).

* Fixed a regression where the admin change form crashed if the user doesn't
  have the 'add' permission to a model that uses ``TabularInline``
  (:ticket:`29637`).

* Fixed a regression where a ``related_query_name`` reverse accessor wasn't set
  up when a ``GenericRelation`` is declared on an abstract base model
  (:ticket:`29653`).

* Fixed the test client's JSON serialization of a request data dictionary for
  structured content type suffixes (:ticket:`29662`).

* Made the admin change view redirect to the changelist view after a POST if
  the user has the 'view' permission (:ticket:`29663`).

* Fixed admin change view crash for view-only users if the form has an extra
  form field (:ticket:`29682`).

* Fixed a regression in Django 2.0.5 where ``QuerySet.values()`` or
  ``values_list()`` after combining querysets with ``extra()`` with
  ``union()``, ``difference()``, or ``intersection()`` crashed due to
  mismatching columns (:ticket:`29694`).

* Fixed crash if ``InlineModelAdmin.has_add_permission()`` doesn't accept the
  ``obj`` argument (:ticket:`29723`).
