13 Nov 2026
Django community aggregator: Community blog posts
Issue 363: Wagtail's new API
News
In Memoriam: Tim Peters, 1952-2026
Guido van Rossum shared the news that Tim Peters died on July 15. He wrote the Zen of Python (PEP 20) and gave Python Timsort, and as "Timbot" he answered countless questions and set the tone for early core development. Pythonistas are sharing their memories in the thread.
Wagtail CMS News
DRF vs Django Ninja: the Wagtail 8.1 API schema
Wagtail's new API runs on Django Ninja, not DRF, and Sage Abdullah and Thibaud Colas explain why: schema generation is first-party rather than deprecated in favor of drf-spectacular, and Pydantic schemas follow the type hints Wagtail already uses.
Djangonaut Space News
Picking Up Django #26355, Part 1: Understanding the Problem
Emanuel Jaimes explores Django ticket #26355, investigating previous implementation attempts and possible approaches to supporting PostgreSQL's array_append functionality in ArrayField.
Landing My First Commit in Django Core.
Goodluck Igbokwe shares his journey to his first Django core commit, exploring ImageField validation and the importance of understanding the code behind the documentation.
Python Software Foundation
Python 3.16.0 alpha 2 is now available
uuid4() and uuid7() now have C implementations and run 15-30x faster, re picked up nested character sets, and startup and garbage collection are quicker. Alpha 3 follows on December 15.
PyPI's redesigned project pages with clearer security signals are now live
Each PyPI project now has a Security tab that shows whether a release has full provenance, meaning every file has an attestation, or none. The redesign also adds search and filters to the release files list, and shows file counts and yanked or quarantined status in the release history.
Joshua Mcshannon Joins the PSF as Infrastructure Engineer
The PSF's new Infrastructure Engineer will spend his time cutting operational toil across python.org, PyPI, and the systems behind PyCon US. He has already started on Kubernetes cost savings.
Updates to Django
Today, "Updates to Django" is presented by Raffaella from Djangonaut Space! 🚀
Last week we had 17 pull requests merged into Django by 15 different contributors - including 8 first-time contributors! Congratulations to ines besrour, himanshu0870, ShabirAhmadLinux, Patel Namraa, Dmitry, Sahil Advani, Kunal Kumar and Hossein Shams for having their first commits merged into Django - welcome on board!
New in Django 6.2:
- An
input_typeof"textarea"was added to theTextareawidget. Like other widgets, when set to"hidden"it now renders thehiddenHTML attribute. (PR #21857) djangois now the preferred name for Django's command-line interface.django-adminremains available as an alias. Both names provide the same functionality. (PR #21260)
New in Django 6.1:
- Fixed a bug in Django 6.1 where accessing a deferred field with the
FETCH_PEERSfetch mode overwrote values that peer instances had already modified locally or loaded viarefresh_from_dbwith an explicitfieldsargument. The fix also addresses aKeyErrorwhen a peer's row had been deleted (#37436).
Django Fellow Reports
Django Fellow Report - Jacob
Between release blocker and security work, Jacob ran a small Trac sprint over Sarah's triage workflow changes and this year's Google Summer of Code dark mode project, and followed up with the GDAL maintainers on findings from the security releases. The main management command is now named django.
Django Fellow Report - Sarah
A four-day week spent mostly on triage and the "Ready for Checkin" backlog, accepting tickets on StepValueValidator crashing for large numbers, order_by("pk") on a union of composite-pk models, and NegatedExpression mishandling FullResultSet. She also enforced ticket assignment limits and triage restrictions in Trac.
Sponsored
Prod-like data for your coding agents
Coding agents write Django code against fixtures and guess what your data looks like. Baseshift gives every agent, PR and developer its own masked copy of your production database, ready in seconds, with no infrastructure changes. Start free and point DATABASE_URL at your first clone.

Articles
Django's Generic Views: FormView
Ben Cardy's fourth class-based view post walks through FormView, which renders a form, validates it, and redirects on success.
Making Django admin easier to use every day
Some examples of a team customizing the admin as needed for their specific use cases. A worthwhile effort if you use it heavily.
Django: introducing django-launch-editor for jump-to-file debugging
Adam Johnson's new package makes the file paths on Django's debug page clickable, opening your editor right at that line. When the editor is out of reach, in Docker or on a server, clicking copies the location instead.
Authenticating Django Channels WebSockets without putting the JWT in the URL
A browser cannot send an Authorization header on a WebSocket handshake. The common fix puts the token in the query string, where every access log keeps a copy. This is the other way, and the four places it can quietly go wrong.
Using OpenTofu to manage your Infrastructure as Code
Ryan Cheley finally learned the OpenTofu that Django Commons runs on by importing his own AWS, Coolify, DigitalOcean, GitHub, Hetzner, and Tailscale setup.
Lock your GitHub Actions
Action tags can be moved, so a workflow pinned to a safe-looking tag can start running an attacker's code. Hugo van Kemenade walks through GitHub's new workflow lockfiles.
Catch the import. Name the culprit. Keep threads free: Introducing gilguard
gilguard is a tiny, zero-dependency package for free-threaded Python (3.13t, 3.14t, 3.15t). Import it first. If any later import quietly turns the GIL back on, you get an error naming the extension module, the package that shipped it, and the line of your code that pulled it in.
What makes uv slow?
uv maintainer Konstin walks through where uv still spends its time, from source distribution builds and network requests down to TOML parsing (about 30ms just to read Airflow's lockfile), hashing, NTFS, and memory allocation.
Events
Wagtail Space 2026
Wagtail Space is next week, November 18-20. The event is 100% online and you can watch live or watch the recordings at your convenience. Expect talks from Wagtail and Django experts plus guest speakers on AI, sustainable tech, and other trends shaping the web. Tickets are free, so grab one before Wednesday.
Videos
People First, Code Always - Kenneth Love
Longtime Django developer Kenneth is the guest in this episode from Jon Gould at Foxley Talent. Lots of insights from coding in the pre/post AI world.
Databases, Django APIs, and AI - Haki Benita
The video cut of Django Chat #209, just over an hour with Haki Benita on getting more out of the ORM and PostgreSQL indexes, where Django Ninja fits, and what Django still needs for typing and APIs. That last part is the ground DEP 0017 covers, adding content type parsing and a request.data attribute that handles JSON, and the forum thread has the wider debate.
Django Job Board
The PSF's CPython Developer in Residence opening is still accepting applications, alongside senior Python roles at Manychat in Barcelona and Proxify, plus a founding engineering role at Alloy.
CPython Developer in Residence at Python Software Foundation
Senior Python Engineer (Barcelona-based / Relocation support to Barcelona) at Manychat
Senior Backend Developer (Python) at Proxify AB
Founding Forward Deployed Engineer at Alloy
Projects
prafulgulani/django-experimental
A playground for trying experimental Django features behind feature flags, installed as django.experimental.
swarfte/django-ninja-expose
Add @expose() to a Django model. Get a REST API.
Sponsor Django News
Reach 4,300+ Django developers every Friday. See sponsorship details and rates.
Planning something for the holidays? Reply and ask about our Black Friday deal.
13 Nov 2026 5:00pm GMT
08 Nov 2026
Django community aggregator: Community blog posts
Django: introducing django-launch-editor for jump-to-file debugging
I've made another package! django-launch-editor makes the file locations on Django's debug error page into links that open your editor.
Here's how it looks, on a KeyError from the package's example project:
(Click to enlarge.)
The change against stock Django is subtle, but can you spot the underlines on the file locations? They're now links that open your editor at the right line, and even the right column when Python knows it.
I think this is gonna be a neat time saver. Before, I would normally remember the filename and line number, then go open that in my editor. Or I would fiddle around copying the file path to then open it. Now it's just a click!
Setup is as easy as installing the package, setting Django's DEFAULT_EXCEPTION_REPORTER setting to the package's reporter class, and adding its URLs. See the README for the details.
When DEBUG is False, the reporter adds nothing to error pages, and the URL isn't even registered, so there's zero overhead in production.
When no editor is found
django-launch-editor launches your editor from the Django server process, so it can only launch an editor directly when you run Django on the same machine as your editor. If you run your development Django server elsewhere, such as in a Docker container or on a remote server, it can't find your editor. In that case, clicking a location shows this dialog and copies the location to your clipboard instead:
That way, you can still paste the location into your editor's "go to file" prompt, without fiddling around selecting text.
Origins: profiling-explorer and launch-editor-py
django-launch-editor grew out of work on profiling-explorer, my browser-based interface for exploring Python profiling data. Its table shows a filename and line number for each function, with the same problem that it would be nice to open the file in my editor at that line. Initially, I added a copy button next to each location, for copying <filename>:<line> to the clipboard, but that still left the switch, paste, and wait steps. But after digging through hundreds of functions with the tool, I really wanted to be able to jump straight to the code with one click.
After a little exploration, I found that the JavaScript world had solved this problem years ago with the launch-editor npm package, which powers "click to open in editor" features in Vite and other frameworks. It detects which editor is running, by scanning the process list, and knows the command line syntax for passing a line and column to many editors. For example, VS Code wants code --goto file:line:column, PyCharm wants pycharm --line line --column column file, and Vim wants vim +line file.
Rather than reinvent this knowledge, I ported the package to Python, as launch-editor-py. Translating code between languages is a task where LLMs shine, so I used my gift Claude subscription to do the bulk of the port. That made the project small enough to be worth doing, leaving me to focus on reviewing and testing the result, adding tests, and making the API Pythonic. The README has a full list of differences from the npm package.
profiling-explorer 1.3.0, released last week, uses launch-editor-py to open file locations on click. Once I had that working, Django's error page was the obvious next target, hence django-launch-editor.
launch-editor-py's API
The main API for launching an editor at a given file, line, and column is a single function:
from launch_editor import LaunchEditorError, launch_editor
try:
launch_editor("src/example.py", line=12, column=4)
except LaunchEditorError as exc:
print(f"Could not open editor: {exc}")
launch-editor-py on the command line
launch-editor-py also comes with a command line interface, which is handy for checking which editor it detects. Use --guess to see which editor it would pick:
$ python -m launch_editor --guess
code
That's the code command for VS Code.
Then pass a filename, optionally with a line and column, to open it:
$ python -m launch_editor example/views.py:20:15
…and VS Code jumps to line 20, column 15 of that file.
You can also try it without installing, using uv:
$ uvx --from launch-editor-py python -m launch_editor --guess
Fin
I hope django-launch-editor saves you some copying, switching, and pasting. And hopefully we can integrate launch-editor-py elsewhere in the Django ecosystem, such as in Django Debug Toolbar. Successful integration among packages could even provide good motivation to add the dependency to Django itself…
May your debugging be infrequent and fast,
-Adam
08 Nov 2026 6:00am GMT
06 Nov 2026
Django community aggregator: Community blog posts
Issue 362: Django 6.1.3, 6.0.10, and 5.2.19 Security Releases
News
Django security releases issued: 6.1.3, 6.0.10, and 5.2.19
Six CVEs, three of them in GeoDjango: two server-side request forgery holes where GDAL resolved URLs or files from GeoJSON CRS members and SpatialReference strings (full protection needs GDAL 3.9+, flagged by the new gis.W001 check), plus log injection through GeometryField. The rest cover base64 uploads that ignored FILE_UPLOAD_MAX_MEMORY_SIZE, cache keys that confused missing and empty Vary headers, and password hashes shown to view-only admin users. Upgrade soon.
Django Software Foundation
Django Steering Council Meeting, November 2
The Steering Council met with the Fellows ahead of the mid-January feature freeze, with Carlton Gibson aiming to land the async transactions PR before then. They also weighed what to do now that sqlparse is no longer maintained (it backs --debug-sql and inspectdb), how to surface DEP discussions on the Forum, and GSoC 2027 ideas.
Python Software Foundation
Announcing new Security Developer at the PSF
Brett Smith, formerly of the W3C and Software Freedom Conservancy, joins Seth Larson and Mike Fiedler on the PSF security team in a new role funded by Anthropic. The Python Security Response Team is handling 3-4× last year's volume of reports and CVEs, and PyPI malware is up 60%, so Brett will help with remediation and scale PyPI's autonomous quarantine program.
How the Python ecosystem responded to the eMudhra intermediate compromise
Within two days of the October 20 CA compromise, fixes shipped for certifi, Python, pip, uv, sigstore, virtualenv, and more, and Python added a last-resort denylist for the bad intermediates (CVE-2026-115557) that was backported to older releases. Seth Larson explains why certifi, pip, and Python sat in the critical path, and why browsers were safe from day one thanks to certificate revocation lists, which Python may adopt.
Wagtail CMS News
Wagtail 8.1: automate more with an improved API and agent-ready tools
The preview REST API can now write more content types, expose StreamField block schemas, and drive moderation workflows (submit, approve, reject, cancel), alongside official agent skills and a prototype CLI. Editors also get SEO checks for meta titles and descriptions, pages can be served as JSON or Markdown from the same URL, and multilingual sitemaps now include translated pages.
An official headless demo for Wagtail
bakerydemo-headless rebuilds the bakery demo as a fully decoupled Next.js front-end in TypeScript, with live preview still working in the CMS. Thibaud Colas notes it runs about 95% on Wagtail's built-in v3 API, whose OpenAPI schema generates typed clients down to individual StreamField blocks, with no GraphQL required.
Updates to Django
Today, "Updates to Django" is presented by Hwayoung from Djangonaut Space! 🚀
Last week we had 17 pull requests merged into Django by 12 different contributors - including 2 first-time contributors! Congratulations to Alex Henman and Spoko Dev for having their first commits merged into Django - welcome on board!
News in Django:
- Django now supports the HTTP
QUERYmethod, allowing safe, idempotent requests with query content in the request body (#37232). - Django templates now support template tags spanning multiple lines, making tags with several arguments easier to read (#35899).
- Fixed a regression where
BoundField.legend_tag()could add a custom required CSS class more than once when passedattrs(#37463).
Django Fellow Reports
Django Fellow Report - Jacob
Jacob Tyler Walls finalized the patches and sent prenotifications for Django's November security releases, then started drafting patches for the next round. He also fixed attrs mutation in legend_tag(), opened a follow-up optimizing lookup preparation for GeoJSON geometries, and sat in on Executive Director interviews.
Django Fellow Report - Sarah
Sarah Boyce accepted five tickets, including consistent database selection for subqueries, dropping GIS support on 32-bit Windows, and a parallel test runner crash, and reviewed fixes for XOR join promotion, select_for_update() after combined queries, and warning assertions. Her own PR allowing multiline template tags was merged, and she worked on three security reports and interviewed final candidates for Executive Director.
Django Fellow Report - Natalia
Natalia Bidart prepared the branch that bootstraps Django 2028, the first calendar-versioned release: it drops Python 3.12 and 3.13, removes the EMAIL_* settings in favor of MAILERS, and finalizes several ORM deprecations, and it lands in mid-January once the 6.2 branch is cut. She also pushed docs PRs that give local builds a new theme and better accessibility, and joined three Executive Director interviews.
Sponsored
Django for Beginners, 6th Edition
The sixth edition is out now, available in digital and paperback formats. It features two new chapters, completely updated for Django 6.1+, and more. Read the first four chapters for free to try it out.

Articles
Soft delete in Django without making a mess
Stein Ove Helset builds soft delete on a deleted_at timestamp and works through where it breaks: bulk QuerySet.delete() still removes rows, unique=True blocks re-creating a deleted record (a conditional UniqueConstraint fixes that, though MySQL and MariaDB ignore the condition), restores can collide with newer rows, and CASCADE never fires for related objects. A filtered default manager paired with an unfiltered base manager keeps related lookups working.
N+1 queries in Django Admin
If a related model's __str__ reads another foreign key, every option in an admin dropdown runs its own query, and select_related() on the edited object doesn't reach those options. Override formfield_for_foreignkey() and formfield_for_manytomany() to add select_related() to the querysets behind the widgets.
Django's Generic Views: TemplateView
Ben Cardy's series on class-based views reaches TemplateView, which needs only a template_name. He uses extra_context for static values, get_context_data() for computed ones, and template_engine to render a single view with Jinja2.
Taking Website Screenshots with Django, Celery, and Playwright
Nik Tomazic builds a Dockerized Django app that takes full-page or viewport screenshots with Playwright. Each capture runs in a Celery task so the form returns right away, and the page polls a small JSON status view until the image is ready. An optional last section moves the browser to Browser Use's paid hosted Chromium for when local browsers eat worker memory or hit bot detection.
Looking for a job? Start a blog.
Tim Schilling argues that a blog shows a hiring manager how you communicate before they ever talk to you, and suggests starter topics like a recent technical decision or how you review code. He says the host doesn't matter (GitHub Pages, dev.to, and Medium all work) and asks you to write it yourself instead of with AI, since the point is to show how you think.
How Caktus Runs and Uses Local Models
Tobias McNulty and Colin Copeland describe the two-GPU workstation Caktus uses to serve open-weight models over Tailscale, so client code stays on its own network. A dense Qwen3.8-27B handles planning and long sessions, and a Qwen3.6 MoE with 3B active parameters runs everyday work at 200-250 tokens per second, both on vLLM in Docker Compose. The post includes their benchmarks, why Gemma 4 31B didn't make the cut, and the pi.dev and VS Code configs they use daily.
Per-Object Permissions in Django That Roll Back with Atomic()
Joshua Fields wrote pemba, a Zanzibar-style authorization library that keeps per-object permission relationships in your own Django database. A grant is just rows in the current transaction, so it commits or rolls back with the data it protects, which a separate service like SpiceDB can't guarantee.
Artisanal Podcasting in the Age of AI
Will Vincent has hand-edited Django Chat in GarageBand for nearly seven years, even with AI tools that promise to handle the whole thing. Editing gives him a second listen to each conversation and a kind of deep focus he no longer gets when coding with a handful of AI agents.
Caching at Scale in Django: Lessons from Production
Johnny Metz's team handled about 20x traffic growth on a multi-tenant Django API by caching aggressively: per-user lists of document IDs paired with one shared entry per document, seven-day TTLs with invalidation on Django signals, a cached identity lookup, and failing open when Redis goes down. During the rollout, database queries per second halved, and Redis now serves most reads at a 97% hit rate.
Events
DjangoCon Europe 2027 Call for Participation
DjangoCon Europe runs February 17-21, 2027, in Innsbruck, Austria, and wants talk and workshop proposals on technical and non-technical topics from new and experienced speakers. Proposals close November 15, 2026.
Podcasts
Django Chat #209: Databases, Django APIs, and AI - Haki Benita
Haki Benita talks about getting more out of Django's ORM and PostgreSQL indexes, why Django Ninja appeals for APIs, and what Django needs for typing and a built-in API story. They also get into how AI is changing the way developers learn and share what they know.
Videos
From librarian to Djangonaut: My Open Source journey with Annabelle Wiegart
In a guest talk for Djangonaut Space Session 7, Annabelle Wiegart traces her path from librarian to Django contributor, PyLadies Zurich organizer, and Djangonaut Space captain. She talks about working on ORM tickets and nullable expressions with mentors, and how contributing went from intimidating to something she could do.
Django Forum
A Path to Modernizing APIs in Django (DEP 0017 Content Type Parsing)
Picking up from the Haki Benita episode of Django Chat, Will Vincent lists what stands between Django and a built-in API: a modernized HttpRequest through DEP 0017, a pluggable serialization layer (the hardest part), and then the view layer. Carlton Gibson wants those primitives updated first, while Haki would settle on an official API interface and tune performance later.
Django Job Board
The PSF's CPython Developer in Residence opening leads the board this week, alongside senior Python roles at webbyfox consultancy and at Manychat in Barcelona, with relocation support.
CPython Developer in Residence at Python Software Foundation
Senior Python Engineer at webbyfox consultancy
Senior Python Engineer (Barcelona-based / Relocation support to Barcelona) at Manychat
Projects
amureki/django-cmdbar
Adds a Cmd+K / Ctrl+K palette to the Django admin for jumping to models, searching records (user alice), or opening one by primary key (user#42). It respects admin permissions and needs no frontend dependencies, middleware, URLs, or migrations: just add django_cmdbar above django.contrib.admin in INSTALLED_APPS.
Metron-Project/izaya
An htmx-powered autocomplete widget for Django forms that ships no required styles, so it fits any CSS framework. Register a ModelLookup with your search_fields, drop LookupWidget into a form (with multiple=True for multi-selects), and use rank_fields to put the closest matches first; it needs Python 3.14+ and Django 6.0+.
Sponsor Django News
Reach 4,300+ Django developers every Friday. See sponsorship details and rates.
06 Nov 2026 5:00pm GMT



