Changelog¶
Unreleased¶
Render labels on a field with
choicesonly for keys among them, as a model choice field already does with its queryset, so a bound form no longer shows labels for submitted keys the field rejects. Document that a field without choices, such as aCharField, can’t hide themHarden the GitHub workflows: give the test workflow a read-only token, pin actions to commit SHAs, stop persisting checkout credentials, and publish to PyPI from a
pypienvironment without the dependency cache
v0.4.0 - 2026-11-03¶
Add an example project in
example/that usesLookupWidgeton aForeignKey, aManyToManyFieldand aCharFieldwith choices, with lookups over models and over a plain list, and shows the selected values inside the search boxAdd
clean_query()toLookup, so a lookup can keep whitespace that means something to itssearch, such as a leading space. It strips surrounding whitespace by default, as beforeTest against MySQL and MariaDB in CI, and document how their default collations affect ranking
Publish the documentation on Read the Docs, with an API reference, and shorten the README to a quick start
v0.3.0 - 2026-11-01¶
Add an
IZAYA_LOGIN_REQUIREDsetting that denies anonymous searches on every lookup, with ahas_accessoverride to opt one out, and the system checkizaya.W001for a missingAuthenticationMiddlewareShow a message when
has_accessdenies a search, from the newlogin_required_textlookup attribute for anonymous users andaccess_denied_textfor everyone else. The search endpoint now renders this 403 instead of raisingPermissionDenied, so a project’shandler403and anyprocess_exceptionmiddleware no longer run for it
v0.2.0 - 2026-11-01¶
Fix a single-value
LookupWidgetshowing its placeholder beside the selected value: the placeholder is now removed while a value is selected and restored when it’s removedAdd
rank_fieldsandrank()toModelLookup, so the closest matches come first and the best match isn’t lost pastmax_resultsAdd type annotations and a
py.typedmarker, so type checkers can read izaya’s typesModelLookup.modelno longer defaults toNone, so a subclass that doesn’t set it has nomodelattribute
0.1.1 - 2026-11-01¶
Fix the results staying white in dark mode: colours from
IZAYA_CLASSES["listbox"]now overrideizaya/layout.csswhatever order the stylesheets load inAdd
--izaya-listbox-backgroundand--izaya-listbox-colorcustom propertiesSkip the field queryset check when it can’t drop anything, so a
ModelLookupon an unfiltered field renders its selection in one query instead of two
0.1.0 - 2026-10-31¶
Initial release.
LookupWidgetform widget with single and multiple selectionLookupandModelLookupfor searching any data source or Django modelhtmx search endpoint, with an access check for each lookup
Keyboard control and ARIA combobox markup
Support for any CSS framework through
IZAYA_CLASSES, with an optional layout stylesheetizaya:selectandizaya:removeJavaScript events