A better and faster multiple selection widget with suggestions for Django
This plugin provides a replacement for standard multi-choice select on Django admin pages.
You can use this as custom widget for ManyToManyField
.
- Filtering is performed on server side and thus significantly improves performance.
- Uses
Twitter Typeahead
to provide suggestion completion. - Works great with ManyToMany fields that can be chosen from
thousands of thousands of choices, e. g.
User - City
relations.
Install
django-searchable-select
.$ pip install django-searchable-select
Add ‘searchableselect’ to your settings.
# settings.py INSTALLED_APPS = ( # ... 'searchableselect', # ... )
Add URL pattern required for the suggesting engine to your root
urls.py
.# urls.py urlpatterns = patterns( '', # ... url('^searchableselect/', include('searchableselect.urls')), # ... )
Use the widget in your model admin class:
from django import models, forms from searchableselect.widgets import SearchableSelect from models import Traveler class TravelerForm(forms.ModelForm): class Meta: model = Traveler exclude = () widgets = { 'cities_visited': SearchableSelect(model='cities.City', search_field='name', many=True, limit=10) } class TravelerAdmin(admin.ModelAdmin): form = TravelerForm admin.site.register(Traveler, TravelerAdmin)
Remember to always initialize
SearchableSelect
with three keyword arguments:model
,search_field
andmany
.model
is the string in formAPP_NAME.MODEL_NAME
representing your model in the project, e. g. ‘cities.City’search_field
is the field within model that will be used to perform filtering, e. g. ‘name’many
must beTrue
forManyToManyField
andFalse
forForeignKey
.limit
(optional) specifies the maximum count of entries to retrieve.
Just run the project from example directory, head to http://127.0.0.1:8000, login as admin
/admin
and try adding Cats!
- Python 2.7.x: Django 1.7, 1.8, 1.9, 1.10
- Python 3.x: Django 1.8, 1.9, 1.10
- Not tested with empty fields.
I’m looking forward to bug reports and any kind of contribution.
You are free to use this where you want as long as you keep the author reference. Please see LICENSE for more info.