==========================
Django 6.1.1 release notes
==========================

*September 2, 2026*

Django 6.1.1 fixes one crash in Django 5.2 and several bugs in 6.1.

Bugfixes
========

* Fixed a crash in Django 5.2 when combining :meth:`distinct(*fields)
  <.QuerySet.distinct>` with ``order_by()`` and ``values()`` and using two
  lookup paths resolving to the same column (:ticket:`37222`).

* Fixed a regression in Django 6.1 where the deprecation of double-dot variable
  lookups incorrectly applied to string and translated template literals
  containing two consecutive dots, such as ``{{ "a..b" }}`` (:ticket:`37257`).

* Fixed a regression in Django 6.1 where :attr:`.ModelAdmin.list_display`
  entries that traverse multiple relations using ``__`` could crash or display
  incorrect values (:ticket:`37270`).

* Fixed a bug in Django 6.1 where the ``fields.E323`` system check did not
  detect mixed ``on_delete`` variants for auto-created intermediate models for
  ``ManyToManyField``\s (:ticket:`37254`).

* Fixed a regression in Django 6.1 where custom querysets used with
  :class:`~django.db.models.Prefetch` for forward foreign key or reverse
  one-to-one relationships were not routed using the parent queryset's
  database (:ticket:`37300`).

* Fixed a regression in Django 6.1 where HTML-safe strings, such as those
  created with :func:`~django.utils.safestring.mark_safe`, used as form media
  assets were treated as asset paths rather than being rendered verbatim
  (:ticket:`37262`).

* Fixed a regression in Django 6.1 that caused ``AlterField`` operations that
  changed only the Python-level ``on_delete`` option of ``ForeignKey`` or
  ``OneToOneField`` fields to perform unnecessary schema changes
  (:ticket:`37260`).

* Fixed a bug in Django 6.1 where :class:`~django.db.models.DecimalField`
  without ``max_digits`` and ``decimal_places`` caused a crash when retrieving
  values on SQLite (:ticket:`37275`).

* Fixed a regression in Django 6.1 that caused a crash when iterating a
  ``QuerySet`` of a model overriding ``Model.from_db()`` without the new
  ``fetch_mode`` keyword argument. Such overrides now work again, but are
  deprecated and should be updated to accept ``fetch_mode`` (:ticket:`37259`).

* Fixed a regression in Django 6.1 where an admin changelist search crashed
  when a ``search_fields`` entry used an ``__exact`` lookup on a field with
  ``choices``, and where any search term matched all rows with a ``True``
  value when an ``__exact`` lookup was used on a ``BooleanField``
  (:ticket:`37263`).

* Fixed a regression in Django 6.1 that caused ``__in`` lookups on annotations
  to erroneously return empty querysets and ``__range`` lookups to crash when
  passed an iterator (:ticket:`37311`).

* Fixed a bug in Django 6.1 where :meth:`.QuerySet.in_bulk` chained after
  :meth:`.QuerySet.values` or :meth:`.QuerySet.values_list` could drop selected
  annotations or produce incorrect mapping keys (:ticket:`37312`).
