django-multiselectfield
Django multiple select field
What it is and what it does
django-multiselectfield extends Django's model and form field system to handle multiple selections from a predefined choice list. Instead of using a separate many-to-many table, it stores the selected values as a comma-separated string in a CharField, which is simpler for lightweight use cases but trades query flexibility for simplicity. The package provides two field types: MultiSelectField for basic multi-choice storage and SortMultiSelectField (added in version 1.0.0) for user-orderable selections using jQuery UI.
The package integrates directly into Django's admin interface and form rendering. It handles validation (min_choices, max_choices), provides a display method for templates, and includes CSS fixes for admin alignment. The core dependency is Django alone; it supports Python 3.8+ and Django 3.2 through 5.1. Maintenance is steady but aging, with the last release in June 2025.
Use it for:
- Store tags or categories on a model where a many-to-many table is overkill and simple comma-separated storage suffices.
- Add multi-select checkboxes to Django admin forms without writing custom widgets.
- Let users rank or reorder selected items using SortMultiSelectField with jQuery UI drag-and-drop.
- Filter Django admin list views by multiple selections using the provided SimpleListFilter pattern.
- Display multiple selections in admin list_display using the get_FOO_display() helper.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Adds model and form fields to Django that let you store and manage multiple selections from a choice list, persisting them as comma-separated values in a CharField.
Yes, if you need lightweight multi-select storage in Django without a separate table. Install friction is minimal and the package is stable. However, consider a proper many-to-many relationship if you need complex queries, filtering, or large-scale data. The LGPL license requires source disclosure of modifications in derivative works, which is fine for most projects but needs review in proprietary contexts.
Install
django-multiselectfield on PyPI
pip
pip install django-multiselectfielduv
uv add django-multiselectfieldpoetry
poetry add django-multiselectfieldInstalling django-multiselectfield
Before you install
Low friction: pure Python wheel with only Django as a runtime dependency. Last release was 2025-06-12 and repo is active with 469 stars, though maintenance status is aging (428 days since last release).
License in practice
Licensed under LGPL 3 (copyleft). You must disclose source code modifications and distribute under the same license if you redistribute the package; acceptable for most open-source and internal projects but requires review in proprietary contexts.
Quickstart
pip install django-multiselectfield
from multiselectfield import MultiSelectField
class MyModel(models.Model):
choices = (('key1', 'Label 1'), ('key2', 'Label 2'))
my_field = MultiSelectField(choices=choices, default=['key1'])
Requires Django 3.2+ and Python 3.8+. For SortMultiSelectField, jQuery and jQuery UI must be included in your template.
Verify before relying
- Whether the package handles Django 5.2+ beyond the classifiers listed (5.0 and 5.1 are declared supported).
- Performance characteristics when storing large numbers of selections in a single field.
- Migration path if you need to convert comma-separated storage to a proper many-to-many relationship.
Package facts
| License | LGPL 3 (copyleft) |
| Python support | not specified |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — django |
| Maintenance | aging — 428 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 1,181,991/month — #4,255 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: django_multiselectfield-1.0.1-py3-none-any.whl
Keywords: django, multiple, select, field, choices
Tags
More Dynamic Content packages
MarkupSafe provides a text object that escapes…
permissive · top 100 on PyPI
Jinja2Jinja2 is a templating engine that renders…
permissive · top 100 on PyPI
soupsieveSoupsieve is a CSS selector library designed to…
permissive · top 100 on PyPI
WerkzeugWerkzeug is a WSGI utility library providing…
permissive · top 1,000 on PyPI
FlaskFlask is a lightweight WSGI web application…
permissive · top 1,000 on PyPI
MakoMako compiles Python-embedded templates into…
permissive · top 1,000 on PyPI
django-admin-autocomplete-filterAdds autocomplete-based filtering to Django…
copyleft · top 15,000 on PyPI
django-bitfieldProvides a BitField model field for Django that…
unclear · top 15,000 on PyPI
django-more-admin-filtersProvides a collection of Django admin filter…
permissive · top 15,000 on PyPI
djangocms-attributes-fieldProvides a Django model field and widget for…
permissive · top 15,000 on PyPI
django-admin-list-filter-dropdownRenders Django admin list filters as dropdown…
permissive · top 5,000 on PyPI
django-admin-csvexportAdds a Django admin action that exports…
permissive · top 15,000 on PyPI
django-autoslugProvides a Django model field that…
copyleft · top 15,000 on PyPI
django-enumfieldsProvides Django model fields that store Python…
permissive · top 15,000 on PyPI
django-autocomplete-lightProvides autocomplete widgets for Django forms…
permissive · top 15,000 on PyPI
dj-inmemorystorageAn in-memory storage backend for Django that…
permissive · top 15,000 on PyPI