$ cat django/week/2026-09-14.log
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.
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
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
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
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
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
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
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
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.
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.