$ cat django/week/2026-09-28.log
the week in review · Sep 28 – Oct 4, 2026
Django 6.1.2, 6.0.9, 5.2.18 dates confirmed
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
Async iterators now close deterministically under aclosing, and distinct(*fields) stops mangling aliases with double underscores.
Fixed #37066 -- Wrapped async iteration sites in (maybe_)aclosing. django/django
Every site that consumes a not-locally-defined async iterable now wraps it in (maybe_)aclosing, so aclose() runs predictably when the consumer exits. If you stream from async querysets or async generators, this removes a class of leaked-iterator behavior that used to depend on garbage collection timing.
Fixed #37350 -- Made distinct(*fields) resolve aliases containing "__". django/django
Query.get_names_to_join() now preserves annotation aliases and SQLCompiler.get_distinct() uses it instead of splitting on LOOKUP_SEP. Annotations whose aliases contain "__" are no longer misread as lookup paths, so distinct(*fields) with such aliases returns the rows you asked for.
Prefer client certificate chains in the TLS extension django/asgiref
The TLS extension keeps only client_cert_chain and drops the fields that forced servers to parse or translate TLS metadata, with the version history documented. If you read certificate details from the chain, the data you need is still there; if you depended on the removed fields, you are the one who has to migrate.
Fixed #36496 -- Ensured the parent path to a sqlite file exists. django/django
Django now creates a SQLite file's parent directories if they are missing before connecting, and re-raises OSErrors as InterfaceError. Projects that point DATABASES at a path under a directory that does not exist yet stop failing with "Unable to open database file".
Fixed #37167 -- Allowed email.headerregistry.Address objects as email addresses. django/django
ADMINS and MANAGERS now accept email.headerregistry.Address objects, not just strings, which is the supported way to build an address with a display name from variable parts. You can stop string-formatting names into addresses and handing those to mail settings.
Fixed #37291 -- Prevented tuple lookups from hanging on F() expressions. django/django
Tuple lookups against F() expressions no longer hang. The fix is deliberately scoped: the release notes say the underlying unsafety with iterating F() expressions will be handled later to allow time to consider backward compatibility, so the deeper query work is still open.
Fixed #37378 -- Removed extra empty breadcrumb in admindocs model index. django/django
The extra empty breadcrumb on the admindocs model index is gone. It was a regression, and admindocs was not the only thing touched this period: unused hyperlink targets pointing at nonexistent docs pages were removed as well.
Results for ubuntu-latest added [skip ci] django/django-asv
by Github Bot
Alongside: ubuntu-latest benchmark results landed in django-asv, the djangodocs Sphinx extension shed obsolete HTML4-era table and parameterlist customizations, plan taglines on djangoproject.com now name what each tier adds, and the steering council's 2026-09-21 meeting notes are up.
$ ls django/week/ # the briefings behind this review
Keep up with Django in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.
Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.