RepoJournal

$ cat django/week/2026-09-14.log

Django

Django

the week in review · Sep 14 – Sep 20, 2026

Django drops PostgreSQL 15 and PostGIS 3.2

By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology

EmailValidator gains per-part validation, and a reverted GeneratedField system check lands with a 6.1.2 release note.

40 commits 28 PRs merged 7 briefings covered

all django reviews →

Fixed #36629 -- Added missing "Choose all" and "Remove all" buttons in admin m2m filter_vertical widget. django/django

by jgoneit

The admin's filter_vertical widget for many-to-many fields regained the "Choose all" and "Remove all" links it had been missing, restoring bulk selection for any ModelAdmin still using that widget.

Fixed #36809 -- Allowed customizing EmailValidator per-part validation. django/django

by Natalia

Address parsing and validation are now split into overridable pieces, and the ValidationError carries the failing username or domain in its params so error messages can name the part that broke. Subclasses of EmailValidator that leaned on the old single validate() path will want a look.

Fixed #37348 -- Reverted "Fixed #36806 -- Added system check for null kwarg in GeneratedField.". django/django

by Natalia

The system check for a null kwarg in GeneratedField is gone again, with a release note for 6.1.2, and fields.W225 stays documented as removed. The revert also notes a report from Michal Porteš; paired with a new test around negated lookups, it confirms Field.null still governs NULL matching when excluding on a nullable GeneratedField.

Fixed #37339 -- Allowed ipaddress objects in GenericIPAddressField. django/django

by Thibaut Decombe

get_prep_value() tested for a colon before coercing to string, so assigning an ipaddress.IPv4Address or IPv6Address instance to the field raised TypeError even though to_python() already accepted those objects. Pass them straight through now.

Fixed #2613 -- Allowed the end-to-end tests to run on several browsers django/djangoproject.com

by kunalKumar-13

A BrowserTestRunner adds a repeatable --browser option, so the end-to-end suite can run across several engines. Chromium stays the default, so ordinary runs and the CI workflow are unchanged.

Fixed #37140 -- Advised against filtering on iterables containing NULL. django/django

by SnippyCodes

The docs now warn against __in lookups whose right-hand side is a subquery that can return NULL, the behavior that quietly yields no rows instead of an error.

Fixed #37261 -- Documented error reporting migration to MAILERS. django/django

by Mike Edmunds

Migrating AdminEmailHandler and BrokenLinkEmailsMiddleware to MAILERS is spelled out for setups that rely on fail_silently with an unreliable email backend.

:tractor: Add sponsorship plan comparison and detailed inquiry pages django/djangoproject.com

by jefftriplett

Alongside: djangoproject.com turned /sponsor/ into a company-facing plan comparison with six detailed benefit pages and inquiry forms, made the tier table usable on small screens, and had empty Fellow and Diamond pages fall back to the next tier with sponsors.

$ 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.

or

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.

all django reviews →