docs/releases/7.2.md
November 5, 2025
---
local:
depth: 1
---
This release adds formal support for Python 3.14.
The listing view of {class}~.ModelViewSet and {class}~.SnippetViewSet now supports reordering of items using drag-and-drop. This feature can be enabled by setting the name of an integer field used for ordering as the {attr}~.ModelViewSet.sort_order_field attribute on the viewset or on the model. This can be a custom field, or set via inheriting Orderable.
Make sure to set default values for the sort order field on existing items before enabling this feature to avoid unexpected behavior. Here is an example: BreadType.objects.all().update(sort_order=F('pk') - 1).
This feature was developed by Joey Jurjens and Sage Abdullah.
Admin and document listings now support filtering by usage count. Image choosers now have both grid and list layouts, with a new toggle for users to switch between the two. The new toggle has also been added to standalone image listings for consistency.
Thank you to Joel William for implementing this as part of the Google Summer of Code program, with support from Coen van der Kamp, Sage Abdullah, Thibaud Colas, Ben Enright.
Built-in content checks now include a readability score, based on length of words and sentences in the page content. The content metrics also now provide an explainer panel detailing how they are calculated. This feature was developed by Thibaud Colas.
Error messages for form validation errors now contain a "Go to the first error" shortcut button. This speeds up navigating to address error messages, particularly for forms split between multiple tabs, where the errors can be hard to locate. This feature was developed by Srishti Jaiswal, Sage Abdullah and LB (Ben) Johnston.
Wagtail's search mechanism is now handled by the external Django Modelsearch library. This change will take effect automatically on upgrading to Wagtail 7.2, with no configuration changes required to most existing projects (but see the upgrade consideration notes below).
As part of this update, dedicated backends for OpenSearch and Elasticsearch 9 are now available; previously OpenSearch was only supported through a legacy version of the Elasticsearch 7 client library. For instructions on configuring these backends, see . Django Modelsearch is developed by Karl Hobley, with additional contributions and Wagtail compatibility developed by Matt Westcott.
We introduce two new shortcuts, ? to open the keyboard shortcuts dialog, and / to focus the search input in the sidebar. The keyboard shortcuts dialog has been reorganized into better categories. When keyboard shortcuts are disabled in user preferences, the "add comment" shortcut is also disabled, and messaging has been added to the keyboard shortcuts dialog to indicate the status of keyboard shortcuts and how to enable or disable them via user preferences. This feature was developed by Pravin Kamble.
Thank you to Dhruvi Patel for implementing this as part of the Google Summer of Code program, with support from LB (Ben) Johnston, Scott Cranfill, Thibaud Colas.
max_value of 100 (%) for the closeness field in Image URL Generator form (LB (Ben) Johnston)WorkflowLock subclass via Task.lock_class in a custom task (Dan Braghis)FileField usage in images & documents (Amir Mahmoodi)update_fields parameter on Page.asave() (Tosinibikunle)CountController default findValue (Sage Abdullah)UserViewSet to User.USERNAME_FIELD to support default ordering with custom User models that may not have a name field (Lynwee)TableBlock header dropdown default option can be translated (arpitmak)construct_wagtail_userbar (Baptiste Mispelon)AGENTS.md (Andrew Selzer)RulesController (LB (Ben) Johnston)attrs in formattedfield tag & clean up other usages of the attrs template include (LB (Ben) Johnston)ImageNode within image template tags (minusf)getattr & setattr uses constant) plus B033 (avoid duplicate values in set literals) (minusf)update_index after upgradingUsers of the Elasticsearch and OpenSearch backends are advised to run the command ./manage.py update_index after upgrading to Wagtail 7.2. If this is already set up to run on a regular schedule as recommended, no further action is required.
This is due to a change in the indexed document structure - specifically, the content_type field has been renamed to _django_content_type. Indexed documents will be upgraded to the new format on the next run of the update_index command. As of this release the old and new document format are handled equivalently, and searches will continue to work as before; however, support for the old format will be dropped in Wagtail 8.0. Consequently, upgrading to Wagtail 8.0 without first having run update_index on Wagtail 7.2 or later may result in incomplete search results.
ATOMIC_REBUILD now active by default on Elasticsearch and OpenSearchThe ATOMIC_REBUILD option, which rebuilds Elasticsearch and OpenSearch indexes as a fresh copy allowing searching to continue on the existing copy while rebuilding is in progress, is now enabled by default. If this is not appropriate for your configuration (for example, the user account used to connect to the server does not have permission to create indexes, or your service provider imposes a strict limit on the number of indexes), you can revert to the previous behavior by adding "ATOMIC_REBUILD": False to the backend's configuration options in WAGTAILSEARCH_BACKENDS.
INDEX configuration option on Elasticsearch and OpenSearch replaced with INDEX_PREFIXThe INDEX configuration option for Elasticsearch and OpenSearch backends has been deprecated. This option specifies a prefix to be used on all index names, allowing multiple Wagtail instances to share the same Elasticsearch server. This has now been replaced with the INDEX_PREFIX option. For example, the option "INDEX": "mysite" should now be replaced with "INDEX_PREFIX": "mysite_" (note the trailing _ character).
The INDEX option is still recognized in this release, but support for this will be dropped in Wagtail 8.0. For backends other than Elasticsearch and OpenSearch, the INDEX option is no longer used and can be removed.
Python 3.9 is no longer supported as of this release; please upgrade to Python 3.10 or above before upgrading Wagtail.
The JavaScript code previously used to generate the title from the file name when uploading images or documents has been replaced with a Stimulus SyncController implementation. This change improves compliance with Content Security Policy (CSP) by avoiding the need for inline scripts.
The events described in images title generation on upload and documents title generation on upload still continue to work as before. However, they may be deprecated in a future release in favor of the events dispatched by the SyncController with the w-sync prefix.
The use of creationFormFileFieldSelector, creationFormTitleFieldSelector, creationFormEventName options in ChooserModalOnloadHandlerFactory have been deprecated and will be removed in a future release.
refresh_index method on search backends renamed to refresh_indexesThe undocumented refresh_index method on search backend instances has been renamed to refresh_indexes, to reflect the fact that it acts on all indexes managed by the backend.