- Suppress spurious URL warnings when
show_listorshow_createareFalse(#46) - Remove docker compose (not needed for this project) and update tooling
- Standardize README badges
- Update bundled Tom Select static files to latest version
- Fix JSON serialization fallback — was incorrectly falling back to
json.JSONEncoderinstead ofDjangoJSONEncoder, which couldn't handle common Django objects - Improve logging, sanitization, and handling of non-model fields in
value_fields - Avoid unnecessary escaping of fields that are already JSON-safe when using
DjangoJSONEncoder
- Extend
filter_byandexclude_byto support multiple filter values - Add ability to specify a custom JSON encoder globally and per-view
- Add new formset demo with prefix support, and update existing demo to prevent parent==child situations
- Implement
__all__across modules to clarify the public/internal API boundary - Calculate and return
total_pagesin autocomplete responses, fixing a paging issue (#42) - Add note about excluding
EmptyModelwhen runningdumpdata(#36) - Prevent excessively large page sizes that could cause denial of service
- Prevent negative page numbers (resolve to page 1 instead)
- Improve filter validation and parsing
- Improve logging wrapper implementation
- Finish implementing URL param constants in templates
- Improve template security and formset support
- Update docs to reflect recent changes and correct inaccuracies
- Replace the
safetypackage withpip-auditfor dependency auditing - Improve how widget configuration is validated
- Improve URL escaping and update permission checks to avoid N+1 queries
- Use safe template replacement instead of
new Function()for improved security - Improve how the widget handles resets and data fetches
- Update supported Python & Django version references
- Fix several config file issues (names, config sections)
- Various small code quality improvements (imports, flag cleanup, cache tests)
- Rework i18n URL pattern handling
- Resolve i18n issue (#43)
- Add tests for #41
- Limit lookup field splitting to first occurrence
- Correct form handling for edge cases where the model primary key isn't Django's default
id - Add new models and forms to cover these edge cases with tests
- Use ruff exclusively (remove references to isort & black)
- Misc cleanup
- For selected values, filter strictly on the
value_field
- Ensure correct filtering on
value_fieldwhen identifying selected values
- Make
hide_selecteddefault toTrue(matches expected behavior) - Additional robustness improvements to widgets
- Fix form fields displaying incorrect labels when form validation fails for another field
- Add
hide_selectedconfiguration option - Introduce
LazyViewto simplify working with autocomplete view/url/model from form fields and widgets - Fix issue where clearing a search query would stop returning results
- Fix issue where reopening a dropdown sometimes showed no options
- Improve performance when a large number of items are pre-selected (automatically paginate through content)
- Fix double-escaping of content in templates
- Return explicit messages for
PermissionDeniederrors - Update all logging to use modulo formatting instead of f-strings
- Add
virtual_fieldsattribute to autocomplete views, resolving issues #34 and #35 - Handle
value_fieldsvsvirtual_fieldscorrectly via__init_subclass__ - Improve mutation observer to handle htmx more explicitly and hide select elements correctly
- Add htmx-in-Bootstrap-tabs demo
- Add formset prefix support in example app
- Prevent error details from leaking to output when
DEBUGisFalse
- Security fix: escape and sanitize all variables and data passed to JavaScript
- Handle dict as input to
get_iterable(#28) - Fix issue caused by optimizing for example instead of general case (#27)
- Improve how merged configs handle defaults (ensure all defaults are included if not explicitly overridden)
- Check that
label_fieldis invalue_fields - Add htmx re-load button
- Add Security policy
- Update docs for
TomSelectChoiceFieldandTomSelectMultipleChoiceField - Update dependencies
- Fix issue where permission checks ran even when
permission_requiredwas set toNone
- Improve how list and create view URLs are built and validated
- Add template tags to check whether global config JS has already been loaded by another widget (prevents duplicate script tags)
- Correct code examples in README
- Add formset support — reformulate how TomSelect is initialized to work with formsets
- Add examples for a basic formset and a model formset
- Add formset tests
- Correct form field setup in docs (queryset attribute is not needed)
- Update README form example to use
TomSelectConfig
- Improve escaping and input handling
- Expand test coverage
- Correct implementation for proxy request class
- Ensure translated strings work in plugin dropdown header
- Use an IIFE to create a new scope and avoid potential variable namespace conflicts in JavaScript
- Improve package logging
- Refactor and re-implement tests for proxy request
- Correct how request proxy is implemented in settings and document its use
- Minor formatting and layout improvements
- Complete refactor of the django_tomselect source with breaking changes
- Major update to example project with ~15 different examples
- Overhaul documentation with new images, consolidated pages, and improved content
- Improvements to static file building — reduced final bundle size by half
- Expanded and updated test suite
- Add ability to trigger TomSelect creation on individual elements
- Add ability to specify the Bootstrap version at project & widget level
- Minor linting improvements
- Expand and correct text in README
- Correct licence header
- Rename package to
django-tomselect - Add ability to turn on/off the value field in tabular widget
- Change
search_lookuptosearch_lookupsto allow multiple lookups - Improve documentation