# Django 5.2.9 documentation

# 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 (#29499).

- Fixed a regression where `QueryDict.urlencode()` crashed if the dictionary contains a non-string value (#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 (#29613).

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

- Fixed translation failure of `DurationField`’s “overflow” error message (#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` (#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 (#29653).

- Fixed the test client’s JSON serialization of a request data dictionary for structured content type suffixes (#29662).

- Made the admin change view redirect to the changelist view after a POST if the user has the ‘view’ permission (#29663).

- Fixed admin change view crash for view-only users if the form has an extra form field (#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 (#29694).

- Fixed crash if `InlineModelAdmin.has_add_permission()` doesn’t accept the `obj` argument (#29723).