RepoJournal

$ cat django/month/2026-08-01.log

Django

Django

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.

157 commits 116 PRs merged 31 briefings covered

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. [1] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before rendering admin links. ↗ django/django
  2. [2] Fixed CVE-2026-15307 -- Blocked raster strings and dicts in spatial lookups. ↗ django/django
  3. [3] Added free-threaded Python 3.14t to PostGIS CI workflow. ↗ django/django
  4. [4] Fixed #27734 -- Made parallel test workers reuse database clones of exited workers. ↗ django/django
  5. [5] Fixed #37242 -- Fixed reading null time fields in LayerMapping. ↗ django/django
  6. [6] Fixed #37236 -- Allowed altering spatial indexes on RasterField. ↗ django/django
  7. [7] Fixed #36626 -- geodjango -- Preserved milliseconds when parsing GPX … ↗ django/django
  8. [8] Fixed #37238 -- Fixed unintentional fallback to python default for a db_default. ↗ django/django
  9. [9] Added free-threaded Python 3.14t to PostGIS CI workflow. ↗ django/django
  10. [10] Remove dead FAQ link and broken anchors on fundraising page ↗ django/djangoproject.com
  11. [11] Removed advice to include ticket numbers in tests. ↗ django/django

$ ls django/month/ # the briefings behind this review

Sat Aug 1 PARALLEL TEST WORKERS NOW REUSE DATABASE CLONES, KILLING FLAKY TEST RUNS Sun Aug 2 DJANGO-LOCALFLAVOR 5.1 SHIPS WITH VATIN VALIDATOR FIX Mon Aug 3 DJANGO FIXES NULL TIME FIELD HANDLING IN GEOSPATIAL MAPPING Tue Aug 4 DJANGO ADDS FREE-THREADED PYTHON 3.14T TO POSTGIS CI Wed Aug 5 DJANGO PATCHES FOUR CRITICAL VULNERABILITIES IN ADMIN AND SPATIAL QUERIES Thu Aug 6 DJANGO 6.1 LANDS. CHANNELS AND DOCS READY. Fri Aug 7 DJANGO ADMIN FIXES SAVE-AS-NEW FOR VIEW-ONLY INLINES Sat Aug 8 DJANGO CLEARS JSONRESPONSE DOCS, DEP 20 MOVES TO ACCEPTED Sun Aug 9 ALL QUIET ON THE DJANGO FRONT Mon Aug 10 ALL QUIET ON THE DJANGO FRONT Tue Aug 11 DJANGO KILLS FALSE DEPRECATION WARNING IN TEMPLATES Wed Aug 12 DJANGO 6.1 LANDS. SECURITY PATCHES SHIPPED. ADMIN BUGS FIXED. Thu Aug 13 DJANGO FIXES MODEL ADMIN DISPLAY BUG, UPDATES DOWNLOAD PAGE FOR CALENDAR VERSIONING Fri Aug 14 DJANGO SECURITY TEAM GETS FORMAL CHARTER, FUNDRAISING TIER LAUNCHES AT $200K Sat Aug 15 DJANGO FIXES UNIQUE VALIDATION REGRESSION AND SCHEMA BLOAT Sun Aug 16 DJANGO QUERYSETS GET SMARTER ABOUT ALIASES, DJANGOPROJECT.COM STANDARDIZES ON UV Mon Aug 17 CHANNELS_REDIS DROPS PYTHON 3.9, TIGHTENS CI Tue Aug 18 Django core lands bugfixes while djangoproject.com adopts ruff Wed Aug 19 Django Restores Legacy Model.from_db() After Fetch Modes Broke It Thu Aug 20 Django's GIS fights Oracle's geometry surprise Fri Aug 21 Channels Redis preps for Python 3.14 and Channels 4 Sat Aug 22 Django site's N+1 query slashed from 45 to 1 Sun Aug 23 Django ASV Gains RelatedIn Benchmark Mon Aug 24 Django fixes release note, clears default ordering confusion Tue Aug 25 DJANGOPROJECT.COM SHORES UP CI TOOLING WITH ACTION UPGRADES AND PRE-COMMIT AUTOMATION Wed Aug 26 One Commit, One Result: django-asv Adds Ubuntu Support Thu Aug 27 Django Benchmark CI Adds Ubuntu Results Fri Aug 28 Django's core test suite declares war on undefined SQL row order Sat Aug 29 Sponsor page moves to a template view, daphne drops Python 3.9 Sun Aug 30 Django resolves FilteredRelation aliases in .values() and .order_by() Mon Aug 31 Benchmark results for ubuntu-latest published