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.