Fixes #9728. Django 4.2 fixes https://code.djangoproject.com/ticket/34192 which causes a callable `storage` argument to be omitted from FileField's deconstructed representation when it returns `default_storage`. Our existing migrations therefore need to be tweaked to match either the broken or fixed representation according to the active Django version, so that makemigrations doesn't see a difference and generate a new migration in the opposite direction.
Fixes #9939
Also remove the mentions of redirects from the documentation - the fact that the method has to check for a different redirect URL is an internal implementation detail, and not relevant to what the assertion is intending to test (namely that a page is successfully created).
We should not assume out of the box that one hour (or any duration) is a valid duration for caches to hold on to stale responses without revalidation, and storing documents in a shared public cache is not appropriate because they may have authentication checks.
Fixes #7720. Unfortunately the different search backends have diverged massively in the autocomplete APIs they support:
* Postgres FTS (and probably the other database FTS backends) ignores the `partial_match` kwarg on `.search()` and `SearchField`, and only supports the `.autocomplete()` / `AutocompleteField` API
* The database fallback backend (and probably Elasticsearch) accepts `partial_match` on `.search()` (in fact I think it always does partial matches regardless of that setting - untested), but raises `NotImplementedError` on `.autocomplete()`
As a result, to perform autocompletion across all backends, we need to try both methods, with a try/except. (Also, user-defined models such as snippets will need either or both of `AutocompleteField` or `SearchField(partial_match=True)` in `search_fields` depending on the backend in use.)
Additionally, while tests have been added to cover the autocomplete behaviour, the test suite only ever runs under the fallback backend (with the exception of the backend-specific tests in wagtail.search), and so these would have succeeded anyhow. Much more cleanup work is needed here, but this will serve as a stopgap solution to get the choosers working as intended again.