$ cat django/month/2026-08-01.log
the month in review · August 2026
Django 6.1, four CVEs, and a parallel-test fix that kills flaky runs
August closed with Django 6.1 shipping, a security team charter and $200K fundraising tier, and a parallel-test worker change that reuses database clones to cut flaky CI.
Django 6.1 landed mid-month, and the security and stability work around it mattered more than the new features. The release included fixes for four critical vulnerabilities in the admin and spatial queries: CVE-2026-15920 makes display_for_field() validate URLs before rendering admin links, and CVE-2026-15307 blocks raster strings and dicts in spatial lookups [1][2]. The security team also gained a formal charter, and a new fundraising tier launched at $200K [3]. If you run the admin or GIS queries, upgrade before your next deploy; the CVEs are fixed in 6.1 and the patches are the kind you don't want to sit on.
One commit changed how parallel tests behave: workers now reuse database clones left by exited workers, which directly targets the intermittent failures that plagued CI. The old headless approach left every worker to clone from the source database; now "made parallel test workers reuse database clones of exited workers" [4] means you stop paying the clone cost and the flake source is gone. This is the kind of fix that quietly makes everyone's Monday morning less stressful.
The GIS desk had three focused fixes: LayerMapping now reads null time fields correctly [5], RasterField can alter spatial indexes [6], and GPX parsing preserves milliseconds [7]. None of these are headline-grabbing, but they close gaps that bit people on real datasets. Separately, a subtle behavioral fix: db_default no longer unintentionally falls back to the Python default [8], which means default values now behave as written in the database layer.
The project's infrastructure side got meaningfully leaner. djangoproject.com cut a N+1 query from 45 to 1 , standardized on uv, and adopted ruff . The benchmark suite added ubuntu-latest results [9], giving developers a second reference platform to compare against. None of these change Django itself, but they smooth the daily contributor experience and keep the site snappy.
Release hygiene got attention too: the download page moved to calendar versioning [10], and the docs now discourage including ticket numbers in tests [11]. For a project that prides itself on documentation, this tightening is a quiet win.
References
- [1] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before rendering admin links. ↗ django/django
- [2] Fixed CVE-2026-15307 -- Blocked raster strings and dicts in spatial lookups. ↗ django/django
- [3] Added free-threaded Python 3.14t to PostGIS CI workflow. ↗ django/django
- [4] Fixed #27734 -- Made parallel test workers reuse database clones of exited workers. ↗ django/django
- [5] Fixed #37242 -- Fixed reading null time fields in LayerMapping. ↗ django/django
- [6] Fixed #37236 -- Allowed altering spatial indexes on RasterField. ↗ django/django
- [7] Fixed #36626 -- geodjango -- Preserved milliseconds when parsing GPX … ↗ django/django
- [8] Fixed #37238 -- Fixed unintentional fallback to python default for a db_default. ↗ django/django
- [9] Added free-threaded Python 3.14t to PostGIS CI workflow. ↗ django/django
- [10] Remove dead FAQ link and broken anchors on fundraising page ↗ django/djangoproject.com
- [11] Removed advice to include ticket numbers in tests. ↗ django/django
$ ls django/month/ # the briefings behind this review