Changelog

To install unreleased versions of a workspace package, see developmental releases.

This changelog covers the whole workspace in one place: the core django-search-query package and the optional django-admin-search-query integration. Deliverables specific to the admin package name it in their heading.

django-search-query 0.1.0a2 (unreleased)

Upcoming changes will be written here.

django-search-query 0.1.0a1 (2026-08-08)

django-search-query 0.1.0a1 adds Django 6.1 support to both packages and fills out the documentation site. Django 6.1 is declared in each package’s metadata and tested alongside 5.2 (LTS) and 6.0, with the django>=5.2 floor unchanged, so moving Django forward stays your project’s decision. The docs are now a guided site for both packages – a runnable tutorial, how-to guides, and an API reference – with a dedicated query-language page whose worked examples are checked against a live table. As an alpha, the APIs may still change before the 0.1.0 release.

What’s new

Django 6.1 support (#8)

Both packages now support Django 6.1 alongside 5.2 (LTS) and 6.0, tested on Python 3.12 and 3.14 and declared in each package’s PyPI metadata. The query language and the admin integration needed no changes for it, and the django>=5.2 floor is unchanged – upgrading stays your project’s decision.

Documentation

Tutorials, reference, and highlighted query examples (#4)

The docs are now a full guided site for both packages: a tutorial that runs a search against a real queryset, how-to guides, an API reference, and explanation pages. Query examples are syntax-highlighted, and an interactive install picker shows the matching pip/uv command for each package.

A dedicated query-language page with worked examples (#6)

The query language now has its own top-level page that shows the payoff up front: a search string becoming a Django Q, filtering a queryset, and the SQL it runs – with results checked against a live table so the examples stay honest. Query snippets are highlighted inline in prose too, not just in code blocks.

Development

CI actions updated to current majors

Workflow actions moved to their current major releases: actions/checkout v7, actions/cache v6, actions/setup-python v7, astral-sh/setup-uv v9.0.0, codecov/codecov-action v7, and dorny/paths-filter v4. Workflow behavior is unchanged, though setup-uv no longer prunes the uv cache, so the first run after this repopulates it.

Lint floor moved to ruff 0.16 (#7)

Minimum ruff>=0.16.0 (was unpinned). 0.16.0 starts formatting Python code blocks inside Markdown, so ruff format now covers the docs tree alongside each package’s src/ and the shared tests/.

Linting also adopts ruff’s curated default rule set. The project’s own linter selection is layered on top of it with extend-select instead of replacing it, so contributors get ruff’s recommended baseline – security, typing-stub, and implicit-concatenation checks among them – without hand-maintaining the list.

The test matrix runs the versions it names (#8)

Each CI leg installed the Django it was named for, then uv run re-synced the environment from uv.lock and reinstalled the locked version over it, so every leg tested the same Django. Legs now hold their install, and a leg fails outright when the Python or the Django it is running is not the one it asked for.

django-search-query 0.1.0a0 (2026-07-19)

django-search-query 0.1.0a0 is the first alpha of the workspace, shipping the core query language together with its optional Django admin integration. The core compiles a Lucene-inspired search string into a Django Q object, backed by a field registry that keeps the searchable surface decoupled from your models and a highlighter for syntax-colored search boxes. The companion django-admin-search-query brings the language to admin changelists, adding a client-side colored, autocompleting search input that degrades to a plain field without JavaScript. As an alpha, the APIs may still change before the 0.1.0 release.

What’s new

Structured search query language (#1)

Turn a user’s search string into a Django Q object with one search_query_to_q() call. The Lucene-inspired syntax covers field-scoped terms (status:open), quoted phrases, boolean AND/OR/NOT with grouping, comparison and range operators, wildcards, and +/- negation. Half-typed or unparseable input degrades to a match instead of raising, so a query runs while the user is still typing.

Searchable-field registry (#1)

A FieldRegistry declares which fields are searchable and maps user-facing names and aliases to ORM lookups, keeping the search surface decoupled from your models. Unknown fields and out-of-enum values are rejected as the query compiles, rather than silently mis-querying.

Query highlighting (#2)

highlight_query_spans() lexes a query string into contiguous (start, role, text) spans – fields, phrases, keywords, operators, negation, and wildcards – ready to drive a syntax-highlighted search box. A registry-aware pass flags unknown fields and out-of-enum values with an error role, and the lexer never raises on half-typed input.

django-admin-search-query: Structured search in the changelist (#1)

SearchQueryAdminMixin teaches the admin search box the query language: drop it before ModelAdmin and the changelist accepts field-scoped, boolean, and phrase queries. Anything it can’t parse – including a plain word – falls back to Django’s built-in search_fields, so the box never behaves worse than stock admin.

django-admin-search-query: Colored, autocompleting search input (#2)

The changelist search box highlights the query as you type – field-scoped terms, phrases, operators, and errors are colored live and entirely client-side, with no per-keystroke request. A keyboard-navigable combobox suggests field names, enum values, and comparison/range operators. With JavaScript off it degrades to the plain search box, so nothing regresses below stock admin.

Development

Automated documentation publishing (#3)

Sphinx docs now build on every pull request, so a broken docs build is caught in review rather than after merge. Merges to master publish the rendered site automatically, keeping the documentation site current without a manual release step.